共用方式為


價值觀

F# 中的值是具有特定類型的數量;值可以是整數或浮點數、字元或文字、清單、序列、陣列、Tuple、歧視聯集、記錄、類別類型或函數值。

系結值

一詞表示將名稱與定義產生關聯。 let關鍵詞會系結值,如下列範例所示:

let a = 1
let b = 100u
let str = "text"

// A function value binding.

let f x = x + 1

值的型別是從定義推斷而來。 對於基本類型,例如整數或浮點數,類型是從常值的類型決定。 因此,在上一個範例中,編譯程式會推斷 的型 b 別為 unsigned int,而編譯程式則會推斷 的型 a 別為 int。 函式值的型別取決於函式主體中的傳回值。 如需函式實值型別的詳細資訊,請參閱 函式。 如需常值類型的詳細資訊,請參閱 常值

編譯程序預設不會對未使用的系結發出診斷。 若要接收這些訊息,請在項目檔中或叫用編譯程式時啟用警告 1182 (請參閱 --warnon 編譯程式 選項下方)。

為什麼不可變?

不可變的值是程式執行過程中無法變更的值。 如果您使用 C++、Visual Basic 或 C# 等語言,您可能會發現 F# 會將不可變數放在不可變的值上,而不是在執行程式期間可指派新值的變數,這出人意料。 不可變的數據是功能性程序設計的重要元素。 在多線程環境中,許多不同線程可以變更的共用可變數難以管理。 此外,使用可變數時,有時候很難判斷變數是否會在傳遞至另一個函式時變更。

在純功能性語言中,沒有任何變數,而且函式的行為嚴格如數學函式。 程序語言中的程式代碼會使用變數指派來改變值,功能語言中的對等程式代碼具有不可變的值,也就是輸入、不可變函式,以及輸出不同的不可變值。 這個數學嚴格度可讓您更嚴格地推理程序的行為。 這個更嚴格的推理是讓編譯程式更嚴格地檢查程序代碼,並更有效率地優化,並協助開發人員更輕鬆地瞭解和撰寫正確的程序代碼。 因此,功能性程式代碼可能比一般程式代碼更容易偵錯。

F# 不是純功能性語言,但它完全支援功能性程序設計。 使用不可變的值是很好的作法,因為這樣做可讓您的程式代碼從功能程序設計的重要層面獲益。

可變數

您可以使用 關鍵詞 mutable 來指定可變更的變數。 F# 中的可變動變數通常應該有有限的範圍,可以是類型的欄位或本機值。 具有有限範圍的可變動變數更容易控制,而且不太可能以不正確的方式修改。

您可以使用 與定義值相同的方式, let 將初始值指派給可變數。 不過,差異在於,您可以使用 運算符將新值指派給可變數 <- ,如下列範例所示。

let mutable x = 1
x <- x + 1

如果關閉擷取標記 mutable 的值可能會自動升階為 'a ref ,包括建立關閉的窗體,例如 seq 建立器。 如果您想要在發生這種情況時收到通知,請在項目檔或叫用編譯程式時啟用警告 3180。

標題 說明
let Bindings 提供使用 let 關鍵詞將名稱系結至值和函式的相關信息。
函數 提供 F# 中的函式概觀。

另請參閱