變數檢視原始碼討論檢視歷史
在初等數學裡,變數或變元、元是一個用來表示值的符號,該值可以是隨意的,也可能是未指定或未定的。在代數運算時,將變數當作明確的數值代入運算中,可以於單次運算時解出多個問題。一個典型的例子為一元二次公式,該公式可以解出每個一元二次方程[1] 的值,只需要將方程的系數代入公式中的變數即可。
變數這個概念在微積分中非常重要。一般,一個函數y = f(x)會包含兩個變數,參數x和值y。這也是「變數」這個名稱的由來,當參數「變動」時,值也會相對應地「變動」。另外在更深的數學中,變數也可以只代表某個數據,一般為數字,但也可能為向量、矩陣或函數等數學物件。
起源及概念之演進
弗朗索瓦·韋達於16世紀末引入了使用字母表示已知及未知數字的想法,並將這些字母視同數字般運算,以在最後簡單代入數值求解。弗朗索瓦·韋達習慣會以子音字母表示已知值,以母音字母表示未知值。
1637年,勒內·笛卡兒引入以x, y, z表示公式中的未知數,以a, b, c表示已知數的習慣,此一習慣至到今日依然常見。
1660年代起,艾薩克·牛頓及哥特佛萊德·萊布尼茲分別獨立發展出無窮小演算,主要研究一個「可變量」的無窮小變動如何導致另一個量(第一個變數(量)的函數)相對應的變動。之後過了近一個世紀,李昂哈德·尤拉修正了無窮小微積分的用語,並引入y = f(x)的概念,f是個函數,具有參數x及值y。直到19世紀末,「變數」這一詞幾乎都被用來指函數的參數及值。
19世紀下半葉,人們發覺無窮小微積分的基礎似乎不夠形式化,不足以處理像是處處不可微之連續函數這類自相矛盾的問題。為了解決此類問題,卡爾·魏爾斯特拉斯引入了新的定義,以取代之前對極限的直觀概念。對極限,舊的概念描述「當「變數」x變動且趨近於a時,f(x)會趨近於L,其中的「趨近」並沒有明確的定義。魏爾斯特拉斯則將上述句子以下列公式取代:
- (\forall \epsilon >0) (\exists \eta >0) (\forall x) \;|x-a|<\eta \Rightarrow |L-f(x)|<\epsilon
其中的5個變數均不被視為是變動的。
此一靜態公式導致今日對變數只是表示數學物件(可以是未知的,或可被給定集合中的任何元素取代)之符號的概念。
計算機科學上
變量通常是可被修改的,即可以用來表示可變的狀態。這是許多語言(如Java)的基本概念之一。有的語言可能定義其它術語,如C語言的左值來精確地表示這裡的(可能匿名的)存儲空間的概念,而「變量」則在變量名的意義上被強調。
當某個已宣告變數開始使用,直譯器或編譯器通常會設定一個空間來儲存所給出的值。稍後該變數不再使用時,那些空間可以回收。
也有觀點認為,變量應該和數學的原意一致,不需要允許它儲存的值可變,不需要有能力表示可變狀態。Haskell的類型變量仍然符合這個含義。
命名
每種編程語言都有規則指定甚麼才可作為變數的名字。
使用C和其相關語言,變數名稱在語法上稱為標識符,必須是由英文字母、數字和底線組成,且必須由字母起頭。有時還不可以使用某些保留字命名。
使用某些語言,變數的名字同時告訴了這個變數帶有甚麼種類的值。例如FORTRAN的程式裏,變數的首個字母顯示了它是整數還是浮點數。變數名字首個字符是$的話,在BASIC的程式裏表示其值是字串。Perl透過字首如$,@,%和&來分辨哪是純量、陣列、雜湊或副程式。
每個編程組織都有非正式的命名規矩——單打獨鬥的程式員亦是如此。有人喜歡所有變數都用簡單的英文字母取名,認為能增加輸入程式碼的速度,但只要變數一多,就會容易混淆,甚至以後自己看回程式碼也不懂在寫甚麼。
迴圈控制變數這樣的虛變量和數學上的習慣類似,通常以i
, j
, k
命名。
統計學上
變量是統計學研究中對象的特徵。它可以是定性的也可以是定量的,一個定量變量要麼是離散的,要麼是連續的。社會科學中研究變量的關係,通常採用數學中對應的觀念,把一個變量稱為自變量(獨立變量),另一個變量稱之為因變量(依賴變量)。