開始在 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 Studio Code:

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# 互動 (FSI) 加以評估。

將整個函式醒目提示 (長度應為 11 行)。 將其醒目提示後,按住 Alt 鍵並按 Enter 鍵。 您會注意到螢幕底部有快顯的終端機視窗,應該會顯示如下:

Example of F# Interactive output with Ionide

這執行了三項作業:

  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 代表「讀取、評估、列印迴圈」。 這很適合您用來試驗並找出有效用的功能。

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# 導覽