F # - Syntaxe de base

Vous avez vu la structure de base d'un programme F #, il sera donc facile de comprendre les autres blocs de construction de base du langage de programmation F #.

Jetons en F #

Un programme F # se compose de plusieurs jetons. Un jeton peut être un mot-clé, un identifiant, une constante, une chaîne littérale ou un symbole. Nous pouvons classer les jetons F # en deux types -

  • Keywords
  • Symbole et opérateurs

Mots-clés F #

Le tableau suivant présente les mots-clés et de brèves descriptions des mots-clés. Nous discuterons de l'utilisation de ces mots-clés dans les chapitres suivants.

Mot-clé La description
abstract Indique une méthode qui n'a pas d'implémentation dans le type dans lequel elle est déclarée ou qui est virtuelle et a une implémentation par défaut.
and Utilisé dans les liaisons mutuellement récursives, dans les déclarations de propriétés et avec plusieurs contraintes sur les paramètres génériques.
as Utilisé pour donner à l'objet de classe courant un nom d'objet. Également utilisé pour donner un nom à un motif entier dans une correspondance de motif.
assert Utilisé pour vérifier le code pendant le débogage.
base Utilisé comme nom de l'objet de classe de base.
begin Dans une syntaxe détaillée, indique le début d'un bloc de code.
class Dans une syntaxe détaillée, indique le début d'une définition de classe.
default Indique une implémentation d'une méthode abstraite; utilisé avec une déclaration de méthode abstraite pour créer une méthode virtuelle.
delegate Utilisé pour déclarer un délégué.
do Utilisé dans les constructions en boucle ou pour exécuter du code impératif.
done Dans une syntaxe détaillée, indique la fin d'un bloc de code dans une expression en boucle.
downcast Utilisé pour convertir en un type inférieur dans la chaîne d'héritage.
downto Dans un for expression, utilisée lors du comptage en sens inverse.
elif Utilisé dans le branchement conditionnel. Une forme courte de else if.
else Utilisé dans le branchement conditionnel.
end

Dans les définitions de type et les extensions de type, indique la fin d'une section de définitions de membre.

Dans une syntaxe détaillée, utilisé pour spécifier la fin d'un bloc de code commençant par le mot-clé begin.

exception Utilisé pour déclarer un type d'exception.
extern Indique qu'un élément de programme déclaré est défini dans un autre binaire ou assembly.
false Utilisé comme littéral booléen.
finally Utilisé avec essayer d'introduire un bloc de code qui s'exécute indépendamment du fait qu'une exception se produise.
for Utilisé dans les constructions en boucle.
fun Utilisé dans les expressions lambda, également appelées fonctions anonymes.
function Utilisé comme une alternative plus courte au mot-clé fun et une expression de correspondance dans une expression lambda qui a une correspondance de modèle sur un seul argument.
global Utilisé pour référencer l'espace de noms .NET de niveau supérieur.
if Utilisé dans les constructions de branchement conditionnel.
in Utilisé pour les expressions de séquence et, dans la syntaxe détaillée, pour séparer les expressions des liaisons.
inherit Utilisé pour spécifier une classe de base ou une interface de base.
inline Utilisé pour indiquer une fonction qui doit être intégrée directement dans le code de l'appelant.
interface Utilisé pour déclarer et implémenter des interfaces.
internal Utilisé pour spécifier qu'un membre est visible à l'intérieur d'un assemblage mais pas à l'extérieur.
lazy Utilisé pour spécifier un calcul à effectuer uniquement lorsqu'un résultat est nécessaire.
let Utilisé pour associer ou lier un nom à une valeur ou une fonction.
let! Utilisé dans les flux de travail asynchrones pour lier un nom au résultat d'un calcul asynchrone ou, dans d'autres expressions de calcul, utilisé pour lier un nom à un résultat, qui est du type de calcul.
match Utilisé pour créer une branche en comparant une valeur à un modèle.
member Utilisé pour déclarer une propriété ou une méthode dans un type d'objet.
module Utilisé pour associer un nom à un groupe de types, valeurs et fonctions associés, pour le séparer logiquement des autres codes.
mutable Utilisé pour déclarer une variable, c'est-à-dire une valeur qui peut être modifiée.
namespace Utilisé pour associer un nom à un groupe de types et de modules associés, pour le séparer logiquement des autres codes.
new

Utilisé pour déclarer, définir ou appeler un constructeur qui crée ou qui peut créer un objet.

Également utilisé dans les contraintes de paramètres génériques pour indiquer qu'un type doit avoir un certain constructeur.

not Pas vraiment un mot-clé. Cependant, pas struct in combination est utilisé comme contrainte de paramètre générique.
null

Indique l'absence d'objet.

Également utilisé dans les contraintes de paramètres génériques.

of Utilisé dans les unions discriminées pour indiquer le type de catégories de valeurs, et dans les déclarations de délégué et d'exception.
open Utilisé pour rendre le contenu d'un espace de noms ou d'un module disponible sans qualification.
or

Utilisé avec des conditions booléennes comme opérateur booléen ou. Équivalent à ||.

Également utilisé dans les contraintes de membre.

override Utilisé pour implémenter une version d'une méthode abstraite ou virtuelle qui diffère de la version de base.
private Restreint l'accès à un membre au code du même type ou module.
public Permet d'accéder à un membre depuis l'extérieur du type.
rec Utilisé pour indiquer qu'une fonction est récursive.
return Utilisé pour indiquer une valeur à fournir comme résultat d'une expression de calcul.
return! Utilisé pour indiquer une expression de calcul qui, lorsqu'elle est évaluée, fournit le résultat de l'expression de calcul contenant.
select Utilisé dans les expressions de requête pour spécifier les champs ou colonnes à extraire. Notez qu'il s'agit d'un mot-clé contextuel, ce qui signifie qu'il ne s'agit pas réellement d'un mot réservé et qu'il agit uniquement comme un mot-clé dans le contexte approprié.
static Utilisé pour indiquer une méthode ou une propriété qui peut être appelée sans instance d'un type, ou un membre de valeur qui est partagé entre toutes les instances d'un type.
struct

Utilisé pour déclarer un type de structure.

Également utilisé dans les contraintes de paramètres génériques.

Utilisé pour la compatibilité OCaml dans les définitions de module.

then

Utilisé dans les expressions conditionnelles.

Également utilisé pour effectuer des effets secondaires après la construction de l'objet.

to Utilisé dans les boucles for pour indiquer une plage.
true Utilisé comme littéral booléen.
try Utilisé pour introduire un bloc de code susceptible de générer une exception. Utilisé avec ou enfin.
type Utilisé pour déclarer une classe, un enregistrement, une structure, une union discriminée, un type d'énumération, une unité de mesure ou une abréviation de type.
upcast Utilisé pour convertir en un type plus élevé dans la chaîne d'héritage.
use Utilisé à la place de let pour les valeurs qui nécessitent l'appel de Dispose pour libérer des ressources.
use! Utilisé au lieu de laisser! dans les workflows asynchrones et autres expressions de calcul pour les valeurs qui nécessitent l'appel de Dispose pour libérer des ressources.
val Utilisé dans une signature pour indiquer une valeur, ou dans un type pour déclarer un membre, dans des situations limitées.
void Indique le type de void .NET. Utilisé lors de l'interopérabilité avec d'autres langages .NET.
when Utilisé pour les conditions booléennes (lorsque les gardes) sur les correspondances de modèle et pour introduire une clause de contrainte pour un paramètre de type générique.
while Introduit une construction en boucle.
with Utilisé avec le mot-clé match dans les expressions de correspondance de modèle. Également utilisé dans les expressions d'objet, les expressions de copie d'enregistrement et les extensions de type pour introduire des définitions de membre et pour introduire des gestionnaires d'exceptions.
yield Utilisé dans une expression de séquence pour produire une valeur pour une séquence.
yield! Utilisé dans une expression de calcul pour ajouter le résultat d'une expression de calcul donnée à une collection de résultats pour l'expression de calcul contenant.

Certains mots-clés réservés proviennent du langage OCaml -

asr terre lor lsl lsr lxor mod sig

Certains autres mots-clés réservés sont conservés pour l'expansion future de F #.

atomique Pause vérifié composant const contrainte 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!