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!