Aan de slag met F# in Visual Studio Code

U kunt F# schrijven in Visual Studio Code met de Ionide-invoegtoepassing voor een geweldige platformoverschrijdende, lichtgewicht IDE-ervaring (Integrated Development Environment) met IntelliSense en codeherstructureringen. Ga naar Ionide.io voor meer informatie over de invoegtoepassing.

Om te beginnen moet u ervoor zorgen dat U F# en de Ionide-invoegtoepassing correct hebt geïnstalleerd.

Uw eerste project maken met Ionide

Als u een nieuw F#-project wilt maken, opent u een opdrachtregel en maakt u een nieuw project met de .NET CLI:

dotnet new console -lang "F#" -o FirstIonideProject

Zodra dit is voltooid, wijzigt u de map in het project en opent u Visual Studio Code:

cd FirstIonideProject
code .

Nadat het project in Visual Studio Code is geladen, ziet u het deelvenster F# Solution Explorer aan de linkerkant van het venster geopend. Dit betekent dat Ionide het project dat u zojuist hebt gemaakt, heeft geladen. U kunt vóór dit tijdstip code schrijven in de editor, maar zodra dit gebeurt, is alles klaar met laden.

Uw eerste script schrijven

Zodra u Visual Studio Code hebt geconfigureerd voor het gebruik van .NET Core-scripts, gaat u naar de Verkenner-weergave in Visual Studio Code en maakt u een nieuw bestand. Geef deze de naam MyFirstScript.fsx.

Voeg nu de volgende code toe:

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"

Met deze functie wordt een woord geconverteerd naar een vorm van Pig Latin. De volgende stap is het evalueren met F# Interactive (FSI).

Markeer de hele functie (deze moet 11 regels lang zijn). Zodra deze is gemarkeerd, houdt u de Alt-toets ingedrukt en drukt u op Enter. U ziet dat er een terminalvenster wordt weergegeven onder aan het scherm. Dit ziet er ongeveer als volgt uit:

Example of F# Interactive output with Ionide

Dit heeft drie dingen gedaan:

  1. Het FSI-proces is gestart.
  2. De code die u hebt gemarkeerd, is verzonden naar het FSI-proces.
  3. Het FSI-proces heeft de code geëvalueerd die u hebt verzonden.

Omdat wat u hebt verzonden een functie was, kunt u die functie nu aanroepen met FSI! Typ het volgende in het interactieve venster:

toPigLatin "banana";;

Het volgende resultaat wordt weergegeven:

val it: string = "ananabay"

Laten we nu een klinker proberen als eerste letter. Voer het volgende in:

toPigLatin "apple";;

Het volgende resultaat wordt weergegeven:

val it: string = "appleyay"

De functie werkt naar verwachting. Gefeliciteerd, u hebt zojuist uw eerste F#-functie geschreven in Visual Studio Code en deze geëvalueerd met FSI!

Notitie

Zoals u misschien hebt opgemerkt, worden de regels in FSI beëindigd met ;;. Dit komt doordat u met FSI meerdere regels kunt invoeren. Aan ;; het einde laat FSI weten wanneer de code is voltooid.

Uitleg van de code

Als u niet zeker weet wat de code daadwerkelijk doet, volgt u een stapsgewijze procedure.

Zoals u ziet, toPigLatin is een functie die een woord als invoer gebruikt en converteert naar een Pig-Latin-weergave van dat woord. De regels hiervoor zijn als volgt:

Als het eerste teken in een woord begint met een klinker, voegt u 'yay' toe aan het einde van het woord. Als het niet begint met een klinker, verplaatst u dat eerste teken naar het einde van het woord en voegt u er 'ay' aan toe.

Mogelijk hebt u het volgende in FSI opgemerkt:

val toPigLatin: word: string -> string

Dit geeft aan dat toPigLatin het een functie is die een string als invoer (aangeroepen) inneemt en een andere stringfunctie retourneertword. Dit staat bekend als de typehandtekening van de functie, een fundamenteel onderdeel van F# dat essentieel is voor het begrijpen van F#-code. U ziet dit ook als u de muisaanwijzer over de functie in Visual Studio Code beweegt.

In de hoofdtekst van de functie ziet u twee verschillende delen:

  1. Een binnenste functie, aangeroepen isVowel, die bepaalt of een bepaald teken (c) een klinker is door te controleren of deze overeenkomt met een van de opgegeven patronen via Patroonkoppeling:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. Een if..then..else expressie waarmee wordt gecontroleerd of het eerste teken een klinker is en een retourwaarde wordt samengesteld uit de invoertekens op basis van of het eerste teken een klinker was of niet:

    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"
    

De stroom is toPigLatin dus:

Controleer of het eerste teken van het invoerwoord een klinker is. Als dat het is, voegt u 'yay' toe aan het einde van het woord. Anders verplaatst u dat eerste teken naar het einde van het woord en voegt u er 'ay' aan toe.

Er is een laatste ding om over te merken: in F# is er geen expliciete instructie om terug te keren van de functie. Dit komt doordat F# is gebaseerd op expressies en de laatste expressie die wordt geëvalueerd in de hoofdtekst van een functie, bepaalt de retourwaarde van die functie. Omdat if..then..else het een expressie is, bepaalt evaluatie van de hoofdtekst van het then blok of de hoofdtekst van het else blok de waarde die door de toPigLatin functie wordt geretourneerd.

De console-app omzetten in een Pig Latin generator

De vorige secties in dit artikel hebben een veelvoorkomende eerste stap gedemonstreerd bij het schrijven van F#-code: het schrijven van een initiële functie en het interactief uitvoeren met FSI. Dit staat bekend als REPL-gestuurde ontwikkeling, waarbij REPL staat voor 'Read-Evaluate-Print Loop'. Het is een uitstekende manier om te experimenteren met functionaliteit totdat u iets hebt dat werkt.

De volgende stap in replgestuurde ontwikkeling is het verplaatsen van werkcode naar een F#-implementatiebestand. Het kan vervolgens worden gecompileerd door de F#-compiler in een assembly die kan worden uitgevoerd.

Als u wilt beginnen, opent u het bestand Program.fs dat u eerder hebt gemaakt met de .NET CLI. U ziet dat er al code aanwezig is.

Maak vervolgens een nieuwe module aangeroepen PigLatin functie en kopieer de toPigLatin functie die u eerder hebt gemaakt, als volgt:

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"

Deze module moet boven de main functie en onder de open System declaratie staan. Volgorde van declaraties is van belang in F#, dus u moet de functie definiëren voordat u deze aanroept in een bestand.

Roep nu in de functie de main functie Pig Latin generator aan op de argumenten:

[<EntryPoint>]
let main args =
    for arg in args do
        let newArg = PigLatin.toPigLatin arg
        printfn "%s in Pig Latin is: %s" arg newArg

    0

U kunt nu uw console-app uitvoeren vanaf de opdrachtregel:

dotnet run apple banana

En u ziet dat het hetzelfde resultaat uitvoert als uw scriptbestand, maar deze keer als een actief programma!

Problemen met Ionide oplossen

Hier volgen enkele manieren waarop u bepaalde problemen kunt oplossen die u kunt tegenkomen:

  1. Als u de codebewerkingsfuncties van Ionide wilt ophalen, moeten uw F#-bestanden worden opgeslagen op schijf en in een map die is geopend in de Visual Studio Code-werkruimte.
  2. Als u wijzigingen hebt aangebracht in uw systeem of ionide-vereisten hebt geïnstalleerd terwijl Visual Studio Code is geopend, start u Visual Studio Code opnieuw.
  3. Als u ongeldige tekens in uw projectmappen hebt, werkt Ionide mogelijk niet. Wijzig de naam van uw projectmappen als dit het geval is.
  4. Als geen van de Ionide-opdrachten werkt, controleert u uw Visual Studio Code-sleutelbindingen om te zien of u ze per ongeluk overschrijft.
  5. Als Ionide is verbroken op uw computer en geen van de bovenstaande problemen is opgelost, verwijdert u de ionide-fsharp map op uw computer en installeert u de invoegtoepassingssuite opnieuw.
  6. Als het laden van een project is mislukt (de F# Solution Explorer geeft dit weer), klikt u met de rechtermuisknop op dat project en klikt u op Details weergeven om meer diagnostische gegevens op te halen.

Ionide is een opensource-project dat is gebouwd en onderhouden door leden van de F#-community. Meld problemen en neem gerust een bijdrage aan de GitHub-opslagplaats ionide-vscode-fsharp.

U kunt ook om verdere hulp vragen van de Ionide-ontwikkelaars en de F#-community in het Ionide Gitter-kanaal.

Volgende stappen

Bekijk Tour of F# voor meer informatie over F# en de functies van de taal.