Aan de slag met F# in Visual Studio Code
U kunt F# schrijven in Visual Studio Code- met de Ionide-invoegtoepassing om een geweldige platformoverschrijdende, lichtgewicht IDE-ervaring (Integrated Development Environment) te krijgen met IntelliSense en codeherstructureringen. Ga naar Ionide.io voor meer informatie over de invoegtoepassing.
Notitie
Controleer voordat u begint of u zowel F# als de Ionide-invoegtoepassing 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. Noem het 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 toets Alt- 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:
Dit heeft drie dingen gedaan:
- Het heeft het FSI-proces gestart.
- De code die u hebt gemarkeerd, is verzonden naar het FSI-proces.
- Het FSI-proces heeft de code geëvalueerd die u hebt verzonden.
Omdat wat u hebt verzonden een functiewas, kunt u die functie nu aanroepen met FSI! Typ het volgende in het interactieve venster:
toPigLatin "banana";;
U zou het volgende resultaat moeten zien:
val it: string = "ananabay"
Laten we nu een klinker proberen als eerste letter. Voer het volgende in:
toPigLatin "apple";;
U zou het volgende resultaat moeten zien:
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. De ;;
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, is toPigLatin
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
een functie is die een string
als invoer (ook wel word
genoemd) gebruikt en een andere string
retourneert. 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:
Een binnenste functie,
isVowel
genoemd, 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
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 van toPigLatin
is 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
zelf een expressie is, bepaalt evaluatie van de hoofdtekst van het then
blok of de hoofdtekst van het else
blok de waarde die wordt geretourneerd door de toPigLatin
functie.
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.
Open eerst 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
met de naam PigLatin
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 declaratie van open System
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 main
-functie je Pig Latin-generatorfunctie aan met 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:
- 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.
- 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.
- Als u ongeldige tekens in uw projectmappen hebt, werkt Ionide mogelijk niet. Wijzig de naam van uw projectmappen als dit het geval is.
- Als geen van de Ionide-opdrachten werkt, controleert u uw Visual Studio Code Key Bindings om te zien of u ze per ongeluk overschrijft.
- Als Ionide niet werkt op uw computer en geen van de bovengenoemde zaken uw probleem heeft opgelost, probeer dan de
ionide-fsharp
map op uw computer te verwijderen en de invoegtoepassingssuite opnieuw te installeren. - Als het laden van een project is mislukt (de F# Solution Explorer zal dit weergeven), klikt u met de rechtermuisknop op dat project en selecteert u Details weergeven, voor meer diagnostische gegevens.
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 ionide-vscode-fsharp GitHub-opslagplaats.
U kunt ook om verdere hulp vragen van de Ionide-ontwikkelaars en de F#-community in het Ionide Gitter kanaal.
Volgende stappen
Bekijk Rondleiding van F#voor meer informatie over F# en de functies van de taal.