Introduzione a F# in Visual Studio Code
Puoi scrivere F# in Visual Studio Code con il plugin Ionide per ottenere un'esperienza IDE leggera e multipiattaforma con IntelliSense e rifattorizzazioni del codice. Visitare Ionide.io per altre informazioni sul plug-in.
Nota
Prima di iniziare, assicurarsi di aver installato sia F# che il plug-in Ionide.
Creare il primo progetto con Ionide
Per creare un nuovo progetto F#, aprire una riga di comando e creare un nuovo progetto con l'interfaccia della riga di comando di .NET:
dotnet new console -lang "F#" -o FirstIonideProject
Al termine, cambiare directory per il progetto e aprire Visual Studio Code.
cd FirstIonideProject
code .
Dopo il caricamento del progetto in Visual Studio Code, verrà visualizzato il riquadro Esplora soluzioni F# sul lato sinistro della finestra aperta. Ciò significa che Ionide ha caricato correttamente il progetto appena creato. È possibile scrivere codice nell'editor prima di questo momento, ma una volta che ciò avviene, tutto è stato caricato.
Scrivere il primo script
Dopo aver configurato Visual Studio Code per l'uso dello scripting di .NET Core, vai alla visualizzazione Esplora e crea un nuovo file. Denominarlo MyFirstScript.fsx.
Aggiungere ora il codice seguente:
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"
Questa funzione converte una parola in una forma di Pig Latin. Il passaggio successivo consiste nel valutarlo usando F# Interactive (FSI).
Evidenziare l'intera funzione (deve essere lunga 11 righe). Dopo averla evidenziata, tenere premuto il tasto alt e premere INVIO. Si noterà che viene visualizzata una finestra del terminale nella parte inferiore della schermata e dovrebbe essere simile alla seguente:
Questa azione ha comportato tre cose:
- È stato avviato il processo FSI.
- Ha inviato il codice evidenziato al processo FSI.
- Il processo FSI ha valutato il codice inviato.
Poiché ciò che è stato inviato è una funzione , è ora possibile chiamare quella funzione con FSI! Nella finestra interattiva digitare quanto segue:
toPigLatin "banana";;
Verrà visualizzato il risultato seguente:
val it: string = "ananabay"
Ora, proviamo con una vocale come prima lettera. Immettere quanto segue:
toPigLatin "apple";;
Verrà visualizzato il risultato seguente:
val it: string = "appleyay"
La funzione sembra funzionare come previsto. Congratulazioni, è stata appena scritta la prima funzione F# in Visual Studio Code ed è stata valutata con FSI.
Nota
Come avrai notato, le righe in FSI vengono terminate con ;;
. Ciò è dovuto al fatto che FSI consente di immettere più righe. Il ;;
alla fine comunica all'FSI quando il codice è terminato.
Spiegazione del codice
Se non si è certi di cosa sta effettivamente facendo il codice, ecco una procedura dettagliata.
Come si può notare, toPigLatin
è una funzione che accetta una parola come input e la converte in una rappresentazione Pig-Latin di tale parola. Di seguito sono riportate le regole seguenti:
Se il primo carattere di una parola inizia con una vocale, aggiungere "yay" alla fine della parola. Se non inizia con una vocale, spostare il primo carattere alla fine della parola e aggiungervi "ay".
Potresti aver notato quanto segue in FSI:
val toPigLatin: word: string -> string
Questo stato indica che toPigLatin
è una funzione che accetta un string
come input (denominato word
) e restituisce un altro string
. Questa operazione è nota come firma del tipo della funzione, una parte fondamentale di F# che è fondamentale per comprendere il codice F#. Si noterà anche questo aspetto se si passa il puntatore del mouse sulla funzione in Visual Studio Code.
Nel corpo della funzione si noteranno due parti distinte:
Una funzione interna, denominata
isVowel
, che determina se un determinato carattere (c
) è una vocale controllando se corrisponde a uno dei modelli forniti tramite il confronto di modelli :let isVowel (c: char) = match c with | 'a' | 'e' | 'i' | 'o' | 'u' | 'A' | 'E' | 'I' | 'O' | 'U' -> true |_ -> false
Espressione
if..then..else
che controlla se il primo carattere è una vocale e costruisce un valore restituito dai caratteri di input in base al fatto che il primo carattere sia una vocale o meno:if isVowel word[0] then word + "yay" else word[1..] + string(word[0]) + "ay"
Il flusso di toPigLatin
è quindi:
Controllare se il primo carattere della parola di input è una vocale. In caso affermativo, allegare "yay" alla fine della parola. In caso contrario, sposta il primo carattere alla fine della parola e aggiungi "ay".
C'è un aspetto finale da notare: in F#, non esiste alcuna istruzione esplicita da restituire dalla funzione. Il motivo è che F# è basato su espressioni e l'ultima espressione valutata nel corpo di una funzione determina il valore restituito di tale funzione. Poiché if..then..else
è un'espressione, la valutazione del corpo del blocco then
o del corpo del blocco else
determina il valore restituito dalla funzione toPigLatin
.
Trasforma l'app console in un generatore di Pig Latin.
Le sezioni precedenti di questo articolo illustrano un primo passaggio comune per scrivere codice F#: scrivere una funzione iniziale ed eseguirla in modo interattivo con FSI. Questo è noto come sviluppo basato su REPL, dove REPL è l'acronimo di "Read-Evaluate-Print Loop". È un ottimo modo per sperimentare le funzionalità fino a quando non si ha qualcosa di funzionante.
Il passaggio successivo dello sviluppo basato su REPL consiste nello spostare il codice funzionante in un file di implementazione F#. Può quindi essere compilato dal compilatore F# in un assembly eseguibile.
Per iniziare, aprire il file Program.fs creato in precedenza con l'interfaccia della riga di comando di .NET. Si noterà che il codice è già presente.
Successivamente, creare una nuova module
denominata PigLatin
e copiare la funzione toPigLatin
creata in precedenza in questo modo:
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"
Questo modulo deve essere sopra la funzione main
e sotto la dichiarazione di open System
. L'ordine delle dichiarazioni è importante in F#, quindi è necessario definire la funzione prima di chiamarla in un file.
Nella funzione main
, ora invoca la tua funzione generatore di Pig Latin sugli argomenti:
[<EntryPoint>]
let main args =
for arg in args do
let newArg = PigLatin.toPigLatin arg
printfn "%s in Pig Latin is: %s" arg newArg
0
È ora possibile eseguire l'app console dalla riga di comando:
dotnet run apple banana
Si noterà che restituisce lo stesso risultato del file di script, ma questa volta come programma in esecuzione.
Risoluzione dei problemi relativi a Ionide
Ecco alcuni modi per risolvere alcuni problemi che potrebbero verificarsi:
- Per ottenere le funzionalità di modifica del codice di Ionide, i file F# devono essere salvati su disco e all'interno di una cartella aperta nell'area di lavoro di Visual Studio Code.
- Se sono state apportate modifiche al sistema o sono stati installati prerequisiti Ionide con Visual Studio Code aperto, riavviare Visual Studio Code.
- Se nelle directory del progetto sono presenti caratteri non validi, Ionide potrebbe non funzionare. Rinomina le directory del progetto se questo è il caso.
- Se nessuno dei comandi Ionide funziona, controllare tasti di scelta rapida di Visual Studio Code per verificare se si esegue l'override di tali comandi per errore.
- Se Ionide non funziona sul tuo computer e nessuna delle soluzioni sopra indicate ha risolto il problema, prova a rimuovere la directory
ionide-fsharp
sul tuo computer e reinstallare la suite dei plug-in. - Se il caricamento di un progetto non riesce (come mostrato in Esplora soluzioni di F#), fare clic con il pulsante destro del mouse su quel progetto e selezionare Visualizza dettagli per ottenere ulteriori informazioni di diagnostica.
Ionide è un progetto open source creato e gestito dai membri della community F#. Segnalare problemi e collaborare al repository GitHub ionide-vscode-fsharp.
È anche possibile richiedere ulteriore assistenza agli sviluppatori Ionide e alla community di F# nel canale Ionide Gitter .
Passaggi successivi
Per altre informazioni su F# e sulle funzionalità del linguaggio, vedere Tour of F#.