blog2geek.com
LLBAvatar de LLB

38 billets | Profil

Recherche Google

ce blog tous
Derniers billets Connexion
Archives

test

02/03/2007

[Lang] [F#] Syntaxe

Note : ce billet a été écrit début 2007. Depuis, j'ai réalisé un début de cours pour F#, bien plus complet. Je vous invite à aller sur mon site pour lire mes articles F# en français.

 

La syntaxe de F# est très proche de celle de Caml, puisque le langage se veut compatible avec Caml. Il y a pourtant quelques différences qu'il est bon de connaître.

 

Commentaires et compilation conditionnelle

En plus des commentaires de Caml "(* ... *)" (on rappelle aussi que les commentaires peuvent être imbriqués), la syntaxe du C++ est acceptée : "//" commente jusqu'à la fin de la ligne. Comme en C, on a maintenant aussi les directives de compilation : #if ident ... #else... #endif. Si ident est défini (à l'aide de l'option du compilateur --define), la première partie est conservée, sinon c'est la deuxième, juste après le else (qui est facultatif).

Si l'on souhaite écire du code compilable aussi bien avec ocamlc
qu'avec le compilateur F#, on dispose de deux nouveaux tests. (*F# F#*) ne sera pris en compte que si on compile avec fsc, et (*IF-CAML*) (*ENDIF-CAML*) sera pris en compte uniquement sous Caml.

 

Syntaxe light

C'est là que les choses deviennent intéressantes. La syntaxe light est optionnelle (il faut mettre #light au début de votre code), mais je la conseille vivement. Elle permet, comme en Python, de se baser sur l'indentation du code pour le parser. Évidemment, cela oblige à toujours indenter le code (mais ça, on le faisait déjà). Il y a quand même quelques contraintes. Quand on a plusieurs let successifs, ou plusieurs intructions, les lignes doivent être alignées sur la même colonne. On indente à chaque fois que l'on commence un nouveau bloc ou lorsque l'on écrit une instruction sur plusieurs lignes.

L'intérêt de tout ça est de simplifier la syntaxe : tous les "in"après les "let" peuvent disparaître. De même, les points-virgulesentre les instructions sont supprimés (et comme en Caml, ne mettez jamais de ";;" dans un fichier source : c'est moche et inutile ; cela ne sert que dans le mode interactif), et pareil pour le "done". Pour les exemples, je vous renvoie au manuel.

Attention, n'utilisez jamais de tabulation ! Utilisez seulement des espaces (deux ou trois).

 

Strings

Les chaînes de caractères sont données verbatim (c'est-à-dire que le caractère "\" ne sera pas interprété) quand elles sont préfixées par le caractère "@". Ce qui donne : let s = @"c:\windows\".

 

Grands nombres

Grande simplification de syntaxe par rapport à OCaml, les entiers détaille arbitraire peuvent être écrits directement dans le code (sans passer par une fonction obscure). Ainsi, en suffixant par I (ex :3141592654I) on désigne un entier long et par N (ex : 42N) un nombre rationnel. De plus, comme pour les flottants, les opérateurs arithmétiques usuels sont surchargés, ce qui allège beaucoup la syntaxe. Il y a donc un seul caractère à ajouter pour des BigInt plutôt que des Int.