Introduzione a F# : Parte 2 - Come iniziare

Seconda parte di un articolo introduttivo in tre parti sul linguaggio funzionale F# di Microsoft.

il
Sviluppatore / Ingegnere informatico / Funzionario, Collaboratore di IProgrammatori

Per mettere in pratica quelle poche istruzioni che abbiamo visto nella prima parte di questa introduzione dobbiamo capire come possiamo provare ad eseguirle. Nel nostro arsenale abbiamo diverse possibilità, vediamole subito.

Try F#

Il modo migliore per provare le istruzioni F# senza installare nulla è visitare la pagina https://try.fsharp.org/: qui trovate una applicazione web (Figura 1) che vi permette di scrivere il codice nella parte centrale, di eseguirlo e di vedere i risultati nella parte a destra della finestra.

L'applicazione web Try F#

Fig. 1 – L’applicazione Try F#

Come potete vedere, ci sono anche una sezione Problems dove potete vedere eventuali errori e una sezione F# BASICS nel lato sinistro della finestra che fornisce ben sette esempi di codice, per i concetti principali legati a F#.

Copiate il primo esempio della prima parte di questa introduzione e incollatela nella sezione centrale e poi cliccate sul pulsante Run: vedrete apparire il risultato nella sezione di destra.

Visual Studio 2022

Ovviamente l’altro modo che vi consigliamo è quello di installare Visual Studio 2022, magari in versione Community, se rientrate nei requisiti della licenza d’uso, così anche in questo caso il costo è azzerato.

F# è uno dei linguaggi installati di default (gli altri sono C# e Visual Basic), quindi non dovete fare delle scelte particolari in fase di installazione.

In Visual Studio abbiamo due modi per eseguire istruzioni o interi programmi in F#: il primo modo è usare la finestra F# Interactive, il secondo modo è creare una “soluzione”, selezionando F# come linguaggio per il relativo progetto.

F# Interactive

Per aprire una finestra F# Interactive potete utilizzare il menu View > Other Windows > F# Interactive. La finestra non è particolarmente “cool”, anzi, è molto spartana e sostanzialmente molto simile alla finestra C# Interactive. Del resto, il compito di questa finestra è solo quello di permettervi di eseguire delle istruzioni o gruppi di istruzioni, per provare la sintassi “al volo”.

Fig. 2 – F# Interactive

Non appena avviate l’apertura della finestra vi trovate nel punto indicato dalla freccia numero 1. Come indicato dal punto 2 delle istruzioni, premete il tasto di Invio (o Enter) per iniziare.

Subito dopo appariranno le informazioni della versione di F# Interactive e di F# attualmente installate. Venite anche informati che per avere un aiuto potete scrivere l’istruzione #help;; per visualizzare alcune informazioni utili. Ricordatevi il doppio punto e virgola (;;) perché vi servirà tra poco.

Ora siete nel punto indicato dalla freccia numero 2. Copiate un esempio di codice dalla prima parte di questa introduzione e incollatela qui. Come potete vedere, viene mantenuta anche l’indentazione (cioè il rientro di alcuni spazi) dell’istruzione let.

Ora siete nel punto 3, ma non sta succedendo nulla. Cosa dovete fare? Semplice, F# Interactive sta aspettando che voi inseriate altre istruzioni oppure che terminiate l’inserimento. Per terminare l’inserimento ed eseguire le istruzioni è sufficiente scrivere ;; e premere Invio.

Subito dopo vedrete apparire il risultato (25), insieme ad alcune informazioni relative ai tipi di dati utilizzati dagli identificatori a e b, nonché del tipo di dato del risultato (media1). In questo caso sono tutti valori di tipo int (numerico intero).

Ora potete inserire ed eseguire altre istruzioni, ma tenete presente che il programma che avete appena eseguito non è stato cancellato, infatti basta eseguire la seguente istruzione per vedere che viene eseguita correttamente, mostrando come risultato il numero 600:

printfn "%i" (media2 500 700);;

Per azzerare completamente la sessione e ripartire da zero potete cliccare con il tasto destro del mouse sulla finestra F# Interactive e selezionare la voce Reset Interactive Session. La finestra si svuoterà e ripartirà con la visualizzazione della versione e delle informazioni per iniziare la sessione.

Applicazione F#

Una soluzione basata su F# si crea come qualsiasi altra soluzione di Visual Studio, tranne per il fatto che a tutt’oggi non esistono ancora dei designer dell’interfaccia utente (per esempio per Windows Forms, WPF, UWP…) e quindi le scelte sono limitate all’interfaccia a caratteri di un progetto per Console oppure a un progetto di libreria.

Aprite Visual Studio 2022 e selezionate la voce di menu File > New > Project. Nella finestra di scelta del progetto, selezionate il linguaggio F# e i tipi di progetto Console. Ne troverete due:

  • Console App (.NET Framework): è il vecchio modello basato su .NET Framework fino alla versione 4.8, utilizzabile solo per applicazioni su piattaforma Windows;
  • Console App: è il nuovo modello basato su .NET (senza la specifica “Framework”, secondo la nuova denominazione) in versioni 5.0 e 6.0 e multipiattaforma, dato che può creare applicazioni per Windows ma anche per Linux e macOS.

Ovviamente la nostra preferenza va a quest’ultimo template.

Dopo aver cliccato su Next, date un nome al progetto (per esempio ILoveFsharp) e alla soluzione (possono essere uguali) e, se volete, cambiate il percorso in cui volete salvare la soluzione e cliccate ancora Next. Selezionate la versione .NET 6.0 e cliccate su Create.

A questo punto sostituite il codice di esempio presente nella finestra con il seguente:

printfn "Ciao da F#!\n"
let pi = 3.14159
let areaCerchio raggio =
  raggio * raggio * pi
let circonferenzaCerchio raggio =
  raggio * 2. * pi
let volumeCilindro raggio lunghezza =
  raggio * raggio * pi * lunghezza
printfn "Circonferenza del cerchio di raggio 5: %f" (circonferenzaCerchio 5.)
printfn "Area del cerchio di raggio 5: %f" (areaCerchio 5.)
printfn "Volume cilindro di raggio 5 e lunghezza 18: %f" (volumeCilindro 5. 18.)

Il codice è sufficientemente chiaro, ma se così non fosse, ecco alcune annotazioni:

  • prima di tutto visualizziamo un saluto;
  • subito dopo definiamo la costante pi con il valore di “pi greco”;
  • di seguito definiamo tre funzioni che, rispettivamente, calcolano l’area di un cerchio, la circonferenza di un cerchio e il volume del cilindro;
  • infine, visualizziamo tre messaggi con il risultato delle tre funzioni, eseguite passando loro i parametri necessari per effettuare il calcolo.

Il risultato che otterrete è il seguente:

Ciao da F#!

Circonferenza del cerchio di raggio 5: 31.415900
Area del cerchio di raggio 5: 78.539750
Volume cilindro di raggio 5 e lunghezza 18: 1413.715500

Da questo breve esempio si nota una particolarità importante di F#: non si può utilizzare una funzione se non è già stata definita in precedenza, perché il codice viene compilato ed eseguito in sequenza. Infatti, se provate a spostare le tre funzioni in fondo al codice, vedrete che Visual Studio visualizzerà subito nella finestra Error List tre errori che indicano che le tre funzioni non sono state definite prima di tentare di visualizzarne il risultato (Figura 3).

Fig. 3 – Errori dovuti all’errata posizione delle funzioni

Conclusione

In questa seconda parte abbiamo visto come si può iniziare a lavorare con F#, sia dalla finestra interattiva, sia creando una vera e propria soluzione in Visual Studio 2022. È stata anche l’occasione per vedere un altro esempio di definizione e di uso pratico di funzioni in F#. Nella terza e ultima parte di questa miniserie introduttiva vedremo cosa sono le funzioni ricorsive in F#.