您可以使用
注意
開始之前,請確定您已安裝 F# 和 Ionide 外掛程式。
用腳本和 REPL 探索 F#
開始寫 F# 最快的方法是使用腳本檔(.fsx)和 F# 互動式(FSI)。 不需要專案檔案或建置設定——只要建立一個檔案開始寫程式,就像你用 Python 或 shell 腳本一樣。
建立並執行指令碼
開啟終端機並執行:
touch hello.fsx
code hello.fsx
將下列程式碼新增至 檔案:
printfn "Hello from F# Interactive!"
let square x = x * x
[ 1 .. 10 ]
|> List.map square
|> printfn "Squares: %A"
直接從終端機執行腳本:
dotnet fsi hello.fsx
您應該看到:
Hello from F# Interactive!
Squares: [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
使用 VS Code 的互動式 REPL
腳本與 Ionide 的 FSI 整合結合時特別強大。 建立一個名為 MyFirstScript.fsx 的新檔案,並加入以下程式碼:
let toPigLatin (word: string) =
let isVowel (c: char) =
match c with
| 'a' | 'e' | 'i' | 'o' | 'u'
| 'A' | 'E' | 'I' | 'O' | 'U' -> true
|_ -> false
if isVowel word[0] then
word + "yay"
else
word[1..] + string(word[0]) + "ay"
此函式會將單字轉換成 Pig Latin形式。 下一個步驟是使用 F# Interactive (FSI) 來評估它。
反白顯示整個函式(其長度應為 11 行)。 反白顯示之後,請按住 Alt 鍵,並按 Enter。 您會注意到畫面底部會出現終端機視窗,看起來應該像這樣:
的 F# 互動式輸出範例
這樣做了三件事:
- 它已啟動 FSI 過程。
- 它會將您標示的程式代碼傳送至 FSI 程式。
- FSI 程式會評估您傳送的程式代碼。
因為您傳送過來的是一個 函式,因此您現在可以使用 FSI 呼叫該函式! 在互動式視窗中,輸入下列內容:
toPigLatin "banana";;
您應該會看到下列結果:
val it: string = "ananabay"
現在,讓我們嘗試用元音作為第一個字母。 輸入下列內容:
toPigLatin "apple";;
您應該會看到下列結果:
val it: string = "appleyay"
函式似乎如預期般運作。 恭喜,您剛才在 Visual Studio Code 中撰寫了您的第一個 F# 函式,並使用 FSI 加以評估!
注意
如您所注意到,FSI 中的行以 ;;結尾。 這是因為 FSI 可讓您輸入多行。 結尾的 ;; 可讓 FSI 知道程式碼何時完成。
何時使用腳本
腳本非常適合探索想法、原型設計、資料分析和自動化任務。 你可以直接在腳本 #r "nuget: PackageName" 中引用 NuGet 套件——不需要專案檔案。
當你的程式碼超出單一檔案,或需要編譯與散布時,你會想轉成完整專案。 下一節將說明如何做到。
使用 Ionide 建立您的第一個專案
對於較大的程式、編譯函式庫,或你想以應用程式形式發佈的程式碼,你會使用 .NET 專案。 若要建立新的 F# 專案,請開啟命令行,並使用 .NET CLI 建立新專案:
dotnet new console -lang "F#" -o FirstIonideProject
完成後,請將目錄變更為專案,然後開啟Visual StudioCode:
cd FirstIonideProject
code .
在 Visual Studio Code 中載入項目之後,您應該會在視窗左側看到 [F# 方案總管] 窗格開啟。 這表示 Ionide 已成功載入您剛才建立的專案。 您可以在這個時間點之前在編輯器中撰寫程式代碼,但一旦發生這種情況,所有專案都已完成載入。
說明程序代碼
如果您不確定程式代碼的實際運作方式,以下是逐步說明。
如您所見,toPigLatin 是接受單字做為其輸入的函式,並將它轉換成該字的 Pig-Latin 表示法。 此規則如下所示:
如果單字中的第一個字元以元音開頭,請將 「yay」 新增至字尾。 如果它不是以元音開頭,請將第一個字元移至字尾,並將 “ay” 新增至該字尾。
您可能已在 FSI 中注意到下列事項:
val toPigLatin: word: string -> string
這表示 toPigLatin 是接受 string 作為輸入的函式(稱為 word),並傳回另一個 string。 這稱為函式的
在函式主體中,您會注意到兩個不同的部分:
內部函式,稱為
isVowel,藉由透過c來檢查指定字元 () 是否為元音符號:let isVowel (c: char) = match c with | 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' -> true |_ -> falseif..then..else表達式會檢查第一個字元是否為母音,並根據這一條件從輸入字元中建構傳回值:if isVowel word[0] then word + "yay" else word[1..] + string(word[0]) + "ay"
因此,toPigLatin 的流程如下:
檢查輸入字的第一個字元是否為元音。 如果是,請將 「yay」 附加至字尾。 否則,請將第一個字元移至字尾,並新增「ay」。
有一個關於這點值得注意的最後一點:在 F# 中,沒有明確的指示來從函數中返回。 這是因為 F# 是以表示式為基礎,而函式主體中評估的最後一個運算式會決定該函式的傳回值。 由於 if..then..else 本身是表達式,因此 then 區塊主體或 else 區塊主體的評估會決定 toPigLatin 函式所傳回的值。
將主控台應用程式轉換成 Pig Latin 產生器
本文前幾節示範撰寫 F# 程式代碼的常見第一個步驟:撰寫初始函式,並使用 FSI 以互動方式執行。 這稱為 REPL 驅動開發,其中 REPL 代表「讀取Evaluate-Print 迴圈」。 這是實驗功能直到運作的絕佳方式。
REPL 驅動開發中的下一個步驟是將工作程式代碼移至 F# 實作檔案。 然後,F# 編譯程式可以將它編譯成可執行的元件。
若要開始,請開啟您稍早使用 .NET CLI 建立的 Program.fs 檔案。 您會發現某些程式代碼已經在裡面。
接下來,建立名為 module 的新 PigLatin,並將您稍早建立的 toPigLatin 函式複製到其中,如下所示:
module PigLatin =
let toPigLatin (word: string) =
let isVowel (c: char) =
match c with
| 'a' | 'e' | 'i' | 'o' | 'u'
| 'A' | 'E' | 'I' | 'O' | 'U' -> true
|_ -> false
if isVowel word[0] then
word + "yay"
else
word[1..] + string word[0] + "ay"
此模組應高於 main 函式,且在 open System 宣告下方。 宣告順序在 F# 中很重要,因此您必須在檔案中呼叫函式之前定義函式。
現在,在 main 函式中,於自變數上呼叫 Pig Latin 產生器函式:
[<EntryPoint>]
let main args =
for arg in args do
let newArg = PigLatin.toPigLatin arg
printfn "%s in Pig Latin is: %s" arg newArg
0
現在您可以從命令列執行主控台應用程式:
dotnet run apple banana
您會看到其輸出與腳本檔案相同的結果,但這次是執行中的程式!
針對 Ionide 進行故障排除
以下是幾個方法,您可以針對可能遇到的特定問題進行疑難解答:
- 若要取得Ionide的程式碼編輯功能,您的 F# 檔案必須儲存到磁碟和 Visual Studio Code 工作區中開啟的資料夾內。
- 如果您已變更系統設置,或在 Visual Studio Code 開啟的情況下安裝 Ionide 所需元件,請重新啟動 Visual Studio Code。
- 如果您的項目目錄中有無效的字元,Ionide 可能無法運作。 如果是這種情況,請重新命名您的項目目錄。
- 如果 Ionide 的命令都沒有作用,請檢查您的 Visual Studio Code 按鍵綁定,看看您是否不小心修改了它們。
- 如果 Ionide 在您的電腦上損壞,且上述方法都沒有解決您的問題,請嘗試移除電腦上的
ionide-fsharp目錄,然後重新安裝整個外掛程式套件。 - 如果專案無法載入(F# 方案總管會顯示此情況),請以滑鼠右鍵點擊該專案,然後按一下 [查看詳細資料] 以獲取更多診斷資訊。
Ionide 是由 F# 社群的成員所建置和維護的開放原始碼專案。 在 ionide-vscode-fsharp GitHub 存放庫回報問題並自由參與。
您也可以在 Ionide Gitter 通道中,向 Ionide 開發人員和 F# 社群尋求進一步協助。
後續步驟
若要深入瞭解 F# 和語言的功能,請參閱 F#導覽。