F# - 基本語法



您已經瞭解了 F# 程式的基本結構,因此很容易理解 F# 程式語言的其他基本構建塊。

F#中的標記

F#程式由各種標記組成。標記可以是關鍵字、識別符號、常量、字串文字或符號。我們可以將 F# 標記分為兩種型別:

  • 關鍵字
  • 符號和運算子

F#關鍵字

下表顯示了關鍵字及其簡要描述。我們將在後續章節中討論這些關鍵字的使用。

關鍵字 描述
abstract 指示一個方法,該方法在其宣告的型別中沒有實現,或者該方法是虛方法並具有預設實現。
and 用於相互遞迴繫結、屬性宣告以及泛型引數上的多個約束。
as 用於為當前類物件賦予一個物件名稱。也用於為模式匹配中的整個模式命名。
assert 用於在除錯期間驗證程式碼。
base 用作基類物件的名稱。
begin 在詳細語法中,指示程式碼塊的開始。
class 在詳細語法中,指示類的定義開始。
default 指示抽象方法的實現;與抽象方法宣告一起使用以建立虛方法。
delegate 用於宣告委託。
do 用於迴圈結構或執行命令式程式碼。
done 在詳細語法中,指示迴圈表示式中程式碼塊的結束。
downcast 用於轉換為繼承鏈中較低的型別。
downto for 表示式中,在反向計數時使用。
elif 用於條件分支。else if 的簡寫形式。
else 用於條件分支。
end

在型別定義和型別擴充套件中,指示成員定義部分的結束。

在詳細語法中,用於指定以 begin 關鍵字開始的程式碼塊的結束。

exception 用於宣告異常型別。
extern 指示已宣告的程式元素是在另一個二進位制檔案或程式集中定義的。
false 用作布林文字。
finally 與 try 一起使用以引入一段程式碼塊,無論是否發生異常,該程式碼塊都會執行。
for 用於迴圈結構。
fun 用於 lambda 表示式,也稱為匿名函式。
function 用作 fun 關鍵字和 lambda 表示式中對單個引數進行模式匹配的匹配表示式的較短替代方法。
global 用於引用頂級 .NET 名稱空間。
if 用於條件分支結構。
in 用於序列表達式,在詳細語法中,用於將表示式與繫結分開。
inherit 用於指定基類或基介面。
inline 用於指示應直接整合到呼叫者程式碼中的函式。
interface 用於宣告和實現介面。
internal 用於指定成員在程式集內部可見,但在程式集外部不可見。
lazy 用於指定僅在需要結果時才執行的計算。
let 用於將名稱與值或函式關聯或繫結。
let! 在非同步工作流中用於將名稱繫結到非同步計算的結果,或者在其他計算表示式中用於將名稱繫結到計算型別的結果。
match 用於透過將值與模式進行比較來分支。
member 用於在物件型別中宣告屬性或方法。
module 用於將名稱與一組相關的型別、值和函式關聯,以將其與其他程式碼邏輯地分開。
mutable 用於宣告變數,即可以更改的值。
namespace 用於將名稱與一組相關的型別和模組關聯,以將其與其他程式碼邏輯地分開。
new

用於宣告、定義或呼叫建立或可以建立物件的建構函式。

也可用於泛型引數約束中,以指示型別必須具有特定建構函式。

not 實際上不是關鍵字。但是,not struct 組合用作泛型引數約束。
null

指示物件不存在。

也可用於泛型引數約束。

of 在判別聯合中用於指示值的類別型別,以及在委託和異常宣告中。
open 用於使名稱空間或模組的內容無需限定即可使用。
or

用作布林條件中的布林或運算子。等效於 ||。

也可用於成員約束。

override 用於實現與基版本不同的抽象或虛方法的版本。
private 將對成員的訪問限制為同一型別或模組中的程式碼。
public 允許從型別外部訪問成員。
rec 用於指示函式是遞迴的。
return 用於指示作為計算表示式結果提供的值。
return! 用於指示一個計算表示式,當計算表示式求值時,它會提供包含計算表示式的結果。
select 在查詢表示式中用於指定要提取的欄位或列。請注意,這是一個上下文關鍵字,這意味著它實際上不是保留字,它只在適當的上下文中充當關鍵字。
static 用於指示無需型別的例項即可呼叫的方法或屬性,或者在型別的所有例項之間共享的值成員。
struct

用於宣告結構型別。

也可用於泛型引數約束。

用於模組定義中的 OCaml 相容性。

then

用於條件表示式。

也可用於在物件構造後執行副作用。

to 在 for 迴圈中用於指示範圍。
true 用作布林文字。
try 用於引入可能生成異常的程式碼塊。與 with 或 finally 一起使用。
type 用於宣告類、記錄、結構、判別聯合、列舉型別、度量單位或型別縮寫。
upcast 用於轉換為繼承鏈中較高的型別。
use 用於代替 let,用於需要呼叫 Dispose 來釋放資源的值。
use! 在非同步工作流和其他計算表示式中用於代替 let!,用於需要呼叫 Dispose 來釋放資源的值。
val 在簽名中用於指示值,或在型別中用於在有限情況下宣告成員。
void 指示 .NET void 型別。在與其他 .NET 語言互操作時使用。
when 用於模式匹配上的布林條件(when 保護)以及為泛型型別引數引入約束子句。
while 引入迴圈結構。
with 在模式匹配表示式中與 match 關鍵字一起使用。也用於物件表示式、記錄複製表示式和型別擴充套件中以引入成員定義,以及引入異常處理程式。
yield 在序列表達式中用於為序列生成值。
yield! 在計算表示式中用於將給定計算表示式的結果附加到包含計算表示式的結果集合中。

一些保留關鍵字來自 OCaml 語言:

asr land lor lsl lsr lxor mod sig

一些其他保留關鍵字保留用於 F# 的未來擴充套件。

atomic break checked component const constraint constructor
continue eager event external fixed functor include
method mixin object parallel process protected pure
sealed tailcall trait virtual volatile

F#中的註釋

F# 提供兩種型別的註釋:

  • 單行註釋以 // 符號開頭。
  • 多行註釋以 (* 開頭,以 *) 結尾。

F#中的基本程式和應用程式入口點

通常,F# 程式沒有任何顯式的入口點。編譯 F# 應用程式時,提供給編譯器的最後一個檔案成為入口點,該檔案中的所有頂級語句都從上到下執行。

一個編寫良好的程式應該只有一個頂級語句,該語句將呼叫程式的主迴圈。

一個非常簡單的 F# 程式,它將在螢幕上顯示“Hello World”:

(* This is a comment *)
(* Sample Hello World program using F# *)
printfn "Hello World!"

編譯並執行程式後,它將產生以下輸出:

Hello World!
廣告
© . All rights reserved.