共用方式為


在 Visual Studio Code 中開始使用 F#

您可以使用 Ionide 外掛程式 在 Visual Studio Code 撰寫 F#,以取得 IntelliSense 和程式碼重構的絕佳跨平臺輕量型整合開發環境 (IDE) 體驗。 請流覽 Ionide.io 以深入瞭解外掛程式。

注意

開始之前,請確定您已安裝 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。 您會注意到畫面底部會出現終端機視窗,看起來應該像這樣:

使用 Ionide 的 F# 互動式輸出範例

這樣做了三件事:

  1. 它已啟動 FSI 過程。
  2. 它會將您標示的程式代碼傳送至 FSI 程式。
  3. 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。 這稱為函式的 類型簽章,是瞭解 F# 程式代碼的關鍵,並且是 F# 的基本組成部分。 如果您將滑鼠停留在 Visual Studio Code 中的函式上,您也會注意到這一點。

在函式主體中,您會注意到兩個不同的部分:

  1. 內部函式,稱為 isVowel,藉由透過 模式比對來檢查指定字元 (c) 是否為元音符號:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. 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 進行故障排除

以下是幾個方法,您可以針對可能遇到的特定問題進行疑難解答:

  1. 若要取得Ionide的程式碼編輯功能,您的 F# 檔案必須儲存到磁碟和 Visual Studio Code 工作區中開啟的資料夾內。
  2. 如果您已變更系統設置,或在 Visual Studio Code 開啟的情況下安裝 Ionide 所需元件,請重新啟動 Visual Studio Code。
  3. 如果您的項目目錄中有無效的字元,Ionide 可能無法運作。 如果是這種情況,請重新命名您的項目目錄。
  4. 如果 Ionide 的命令都沒有作用,請檢查您的 Visual Studio Code 按鍵綁定,看看您是否不小心修改了它們。
  5. 如果 Ionide 在您的電腦上損壞,且上述方法都沒有解決您的問題,請嘗試移除電腦上的 ionide-fsharp 目錄,然後重新安裝整個外掛程式套件。
  6. 如果專案無法載入(F# 方案總管會顯示此情況),請以滑鼠右鍵點擊該專案,然後按一下 [查看詳細資料] 以獲取更多診斷資訊。

Ionide 是由 F# 社群的成員所建置和維護的開放原始碼專案。 在 ionide-vscode-fsharp GitHub 存放庫回報問題並自由參與。

您也可以在 Ionide Gitter 通道中,向 Ionide 開發人員和 F# 社群尋求進一步協助

後續步驟

若要深入瞭解 F# 和語言的功能,請參閱 F#導覽。