在 Visual Studio Code 中開始使用 F#
您可以使用
注意
開始之前,請確定您已安裝 F# 和 Ionide 外掛程式。
使用 Ionide 建立您的第一個專案
若要建立新的 F# 專案,請開啟命令行,並使用 .NET CLI 建立新專案:
dotnet new console -lang "F#" -o FirstIonideProject
完成後,請將目錄變更為專案,然後開啟Visual StudioCode:
cd FirstIonideProject
code .
在 Visual Studio Code 中載入項目之後,您應該會在視窗左側看到 [F# 方案總管] 窗格開啟。 這表示 Ionide 已成功載入您剛才建立的專案。 您可以在這個時間點之前在編輯器中撰寫程式代碼,但一旦發生這種情況,所有專案都已完成載入。
撰寫您的第一個腳本
設定 Visual Studio Code 使用 .NET Core 腳本之後,請瀏覽 Visual Studio Code 中的檔案總管檢視,然後建立新的檔案。 將它命名 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 知道程式碼何時完成。
說明程序代碼
如果您不確定程式代碼的實際運作方式,以下是逐步說明。
如您所見,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 |_ -> false
if..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 檔案。 您會發現某些程式代碼已經在裡面。
接下來,建立名為 PigLatin
的新 module
,並將您稍早建立的 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#導覽。