值 (F#)
F# 中的值是具有特定型別的數量;值可以是整數或浮點數、字元或文字、清單、序列、陣列、Tuple、已區分的聯集、記錄、類別型別或函式值。
繫結值
「繫結」(Binding) 一詞表示將名稱與定義產生關聯。 let 關鍵字會繫結值,如下列範例所示:
let a = 1
let b = 100u
let str = "text"
// A function value binding.
let f x = x + 1
值的型別是從定義推斷的。 如果是基本型別 (例如整數或浮點數),則是從常值的型別來決定型別。 因此,在上述範例中,編譯器推斷 b 的型別是 unsigned int,而推斷 a 的型別是 int。 函式值的型別是從函式主體中的傳回值決定。 如需函式值型別的詳細資訊,請參閱函式 (F#)。 如需常值型別的詳細資訊,請參閱常值 (F#)。
使用不可變的原因
不可變的值是在程式執行過程中無法變更的值。 如果您習慣使用 C++、Visual Basic 或 C# 等語言,F# 首重不可變的值,而不是程式執行期間可指派新值的變數,可能讓您訝異。 不可變的資料是函式程式設計的重要元素。 在多執行緒環境中,可由許多不同的執行緒變更的共用可變變數難以管理。 此外,對於可變變數,有時候難以判斷變數是否會在傳遞至另一個函式時變更。
在純函式語言中,沒有變數,而且函式只做為數學函式。 程序語言中的程式碼使用變數指派來變更值,而在函式語言中的對等程式碼則有不可變的值做為輸入、不可變的函式,以及不同的不可變值做為輸出。 如此在數學方面嚴謹的程度,可以讓程式的行為更符合預期。 如此一來,編譯器就能更嚴格地檢查程式碼,並且在最佳化時更有效率,也有助於程式開發人員更容易了解及撰寫正確程式碼。 所以,比起一般程序程式碼,偵錯函式程式碼也更為容易。
F# 不是純函式語言,但完全支援函式程式設計。 使用不可變的值是良好作法,因為這麼做可讓程式碼從函式程式設計的重要層面獲益。
可變變數
您可以使用 mutable 關鍵字指定可變更的變數。 F# 的可變變數通常應該有限制範圍,可以是型別欄位或區域值。 有限制範圍的可變變數更容易控制,同時也比較不會遭到誤改。
您可以透過定義值的相同方式使用 let 關鍵字,將初始值指派給可變變數。 不過,差異是後續可以透過 <- 運算子將新值指派給可變變數,如下列範例所示。
let mutable x = 1
x <- x + 1
相關主題
標題 |
描述 |
---|---|
提供有關使用 let 關鍵字將名稱繫結至值和函式的詳細資訊。 |
|
提供 F# 函式的概觀。 |