F # - Sintassi di base

Hai visto la struttura di base di un programma F #, quindi sarà facile capire altri elementi costitutivi di base del linguaggio di programmazione F #.

Gettoni in F #

Un programma F # è costituito da vari token. Un token può essere una parola chiave, un identificatore, una costante, una stringa letterale o un simbolo. Possiamo classificare i token F # in due tipi:

  • Keywords
  • Simbolo e operatori

Parole chiave F #

La tabella seguente mostra le parole chiave e una breve descrizione delle parole chiave. Discuteremo l'uso di queste parole chiave nei capitoli successivi.

Parola chiave Descrizione
abstract Indica un metodo che non ha implementazione nel tipo in cui è dichiarato o che è virtuale e ha un'implementazione predefinita.
and Utilizzato in associazioni reciprocamente ricorsive, nelle dichiarazioni di proprietà e con più vincoli su parametri generici.
as Usato per dare all'oggetto classe corrente un nome oggetto. Utilizzato anche per dare un nome a un intero pattern all'interno di una corrispondenza di pattern.
assert Utilizzato per verificare il codice durante il debug.
base Utilizzato come nome dell'oggetto della classe di base.
begin Nella sintassi dettagliata, indica l'inizio di un blocco di codice.
class Nella sintassi dettagliata, indica l'inizio di una definizione di classe.
default Indica un'implementazione di un metodo astratto; utilizzato insieme a una dichiarazione di metodo astratto per creare un metodo virtuale.
delegate Utilizzato per dichiarare un delegato.
do Utilizzato nei costrutti di ciclo o per eseguire codice imperativo.
done Nella sintassi dettagliata, indica la fine di un blocco di codice in un'espressione a ciclo continuo.
downcast Utilizzato per convertire in un tipo inferiore nella catena di ereditarietà.
downto In un for espressione, usata quando si conta al contrario.
elif Utilizzato nella ramificazione condizionale. Una forma breve di else if.
else Utilizzato nella ramificazione condizionale.
end

Nelle definizioni dei tipi e nelle estensioni dei tipi, indica la fine di una sezione delle definizioni dei membri.

Nella sintassi dettagliata, utilizzato per specificare la fine di un blocco di codice che inizia con la parola chiave begin.

exception Utilizzato per dichiarare un tipo di eccezione.
extern Indica che un elemento di programma dichiarato è definito in un altro binario o assembly.
false Usato come valore letterale booleano.
finally Utilizzato insieme al tentativo di introdurre un blocco di codice che viene eseguito indipendentemente dal fatto che si verifichi un'eccezione.
for Utilizzato nei costrutti di loop.
fun Utilizzato nelle espressioni lambda, note anche come funzioni anonime.
function Utilizzato come alternativa più breve alla parola chiave fun e un'espressione di corrispondenza in un'espressione lambda che ha una corrispondenza di pattern su un singolo argomento.
global Utilizzato per fare riferimento allo spazio dei nomi .NET di primo livello.
if Utilizzato nei costrutti di ramificazione condizionale.
in Utilizzato per le espressioni di sequenza e, nella sintassi dettagliata, per separare le espressioni dalle associazioni.
inherit Utilizzato per specificare una classe di base o un'interfaccia di base.
inline Utilizzato per indicare una funzione che dovrebbe essere integrata direttamente nel codice del chiamante.
interface Utilizzato per dichiarare e implementare le interfacce.
internal Utilizzato per specificare che un membro è visibile all'interno di un assieme ma non all'esterno.
lazy Utilizzato per specificare un calcolo che deve essere eseguito solo quando è necessario un risultato.
let Utilizzato per associare o associare un nome a un valore o una funzione.
let! Utilizzato nei flussi di lavoro asincroni per associare un nome al risultato di un calcolo asincrono o, in altre espressioni di calcolo, utilizzato per associare un nome a un risultato, che è del tipo di calcolo.
match Utilizzato per ramificare confrontando un valore con un modello.
member Utilizzato per dichiarare una proprietà o un metodo in un tipo di oggetto.
module Utilizzato per associare un nome a un gruppo di tipi, valori e funzioni correlati, per separarlo logicamente da altro codice.
mutable Utilizzato per dichiarare una variabile, ovvero un valore che può essere modificato.
namespace Utilizzato per associare un nome a un gruppo di tipi e moduli correlati, per separarlo logicamente da altro codice.
new

Utilizzato per dichiarare, definire o richiamare un costruttore che crea o che può creare un oggetto.

Utilizzato anche nei vincoli di parametri generici per indicare che un tipo deve avere un determinato costruttore.

not Non in realtà una parola chiave. Tuttavia, non struct in combinazione viene utilizzato come vincolo di parametro generico.
null

Indica l'assenza di un oggetto.

Utilizzato anche nei vincoli di parametri generici.

of Utilizzato nelle unioni discriminate per indicare il tipo di categorie di valori e nelle dichiarazioni di delegato e di eccezione.
open Utilizzato per rendere disponibile il contenuto di uno spazio dei nomi o di un modulo senza qualificazione.
or

Utilizzato con condizioni booleane come booleano o operatore. Equivalente a ||.

Utilizzato anche nei vincoli dei membri.

override Utilizzato per implementare una versione di un metodo astratto o virtuale che differisce dalla versione di base.
private Limita l'accesso a un membro al codice nello stesso tipo o modulo.
public Consente l'accesso a un membro dall'esterno del tipo.
rec Utilizzato per indicare che una funzione è ricorsiva.
return Utilizzato per indicare un valore da fornire come risultato di un'espressione di calcolo.
return! Utilizzato per indicare un'espressione di calcolo che, una volta valutata, fornisce il risultato dell'espressione di calcolo contenitore.
select Utilizzato nelle espressioni di query per specificare quali campi o colonne estrarre. Nota che questa è una parola chiave contestuale, il che significa che non è effettivamente una parola riservata e agisce solo come una parola chiave nel contesto appropriato.
static Utilizzato per indicare un metodo o una proprietà che può essere chiamata senza un'istanza di un tipo o un membro del valore condiviso tra tutte le istanze di un tipo.
struct

Utilizzato per dichiarare un tipo di struttura.

Utilizzato anche nei vincoli di parametri generici.

Utilizzato per la compatibilità OCaml nelle definizioni dei moduli.

then

Utilizzato nelle espressioni condizionali.

Utilizzato anche per eseguire effetti collaterali dopo la costruzione di oggetti.

to Utilizzato nei cicli for per indicare un intervallo.
true Usato come valore letterale booleano.
try Utilizzato per introdurre un blocco di codice che potrebbe generare un'eccezione. Usato insieme a o, infine.
type Utilizzato per dichiarare una classe, un record, una struttura, un'unione discriminata, un tipo di enumerazione, un'unità di misura o un'abbreviazione di tipo.
upcast Utilizzato per convertire in un tipo che è più alto nella catena di ereditarietà.
use Utilizzato invece di let per i valori che richiedono la chiamata di Dispose per liberare risorse.
use! Usato invece di lasciare! nei flussi di lavoro asincroni e in altre espressioni di calcolo per i valori che richiedono la chiamata di Dispose per liberare risorse.
val Utilizzato in una firma per indicare un valore o in un tipo per dichiarare un membro, in situazioni limitate.
void Indica il tipo di vuoto .NET. Utilizzato durante l'interoperabilità con altri linguaggi .NET.
when Utilizzato per condizioni booleane (quando sorveglia) sulle corrispondenze di pattern e per introdurre una clausola di vincolo per un parametro di tipo generico.
while Introduce un costrutto a ciclo continuo.
with Utilizzato insieme alla parola chiave match nelle espressioni di corrispondenza dei pattern. Utilizzato anche in espressioni di oggetti, espressioni di copia di record ed estensioni di tipo per introdurre definizioni di membri e per introdurre gestori di eccezioni.
yield Utilizzato in un'espressione di sequenza per produrre un valore per una sequenza.
yield! Utilizzato in un'espressione di calcolo per aggiungere il risultato di una data espressione di calcolo a una raccolta di risultati per l'espressione di calcolo contenitore.

Alcune parole chiave riservate provenivano dalla lingua OCaml -

asr terra lor lsl lsr lxor mod sig

Alcune altre parole chiave riservate vengono conservate per la futura espansione di F #.

atomico rompere controllato componente const vincolo constructor
continue eager event external fixed functor include
method mixin object parallel process protected pure
sealed tailcall trait virtual volatile

Comments in F#

F# provides two types of comments −

  • One line comment starts with // symbol.
  • Multi line comment starts with (* and ends with *).

A Basic Program and Application Entry Point in F#

Generally, you don’t have any explicit entry point for F# programs. When you compile an F# application, the last file provided to the compiler becomes the entry point and all top level statements in that file are executed from top to bottom.

A well-written program should have a single top-level statement that would call the main loop of the program.

A very minimalistic F# program that would display ‘Hello World’ on the screen −

(* This is a comment *)
(* Sample Hello World program using F# *)
printfn "Hello World!"

When you compile and execute the program, it yields the following output −

Hello World!