Développement fonctionnel avec F#

J’ai pu assister à quelques présentations lors de la dernière édition des TechDays.  Et le sujet que j’ai choisi de présenter est le langage F#. Mon choix est dû au fait que je ne connaissais pas ce langage… et que ce fut une des sessions où j’ai découvert le plus de choses. J’ai beaucoup apprécié l’accessibilité du speaker  qui n’est ni plus ni moins que le concepteur du langage,  Don SYME.

Dans cet article je voudrais répondre aux quelques questions que je me suis moi-même posées,  à savoir :

  • Qu’est ce que le langage F# ?
  • Quel est l’intérêt de F# ?

Je vais aussi faire une description des principales nouveautés apportées par F#3.0.

Qu’est ce que le langage F# ?

On dit de ce langage que c’est un langage fonctionnel inspiré fortement d’un autre langage qui est OCaml, je ne vais pas m’attarder la dessus car je ne connais pas ce langage, par contre j’ai voulu comprendre ce que signifie un langage fonctionnel.

Apres avoir googlisé j’ai trouvé en  effet qu’il existe 3 familles de langages de programmation :

  • La programmation logique : ce sont les langages dédiés à faire de l’intelligence artificielle je citerai prolog.
  • La programmation impérative : l’exemple que je donnerais est le C#, enfin,  je me dois de citer aussi le C, le C++, Java et même l’assembleur. Vous trouverez certainement plusieurs définitions de ce que cela représente la programmation impérative, mais en quelques mots : c’est l’exécution des instructions successives pour modifier l’état de la mémoire,  l’assignation, le bouclage, le branchement conditionnel, et le branchement sans condition. Si je vous dis que le plus grand inconvénient de ce type de programmation c’est le fait de connaitre à tout moment l’état d’une variable pour éviter les effets de bord, vous allez me dire mais c’est ça la dure vie de programmeur et que si cela ne me plait pas, je peux faire un autre métier…  Mais il ne faut pas cacher la dure réalité c’est que l’on passe un temps fou à déboguer  nos programmes impératifs. Et c’est là où je vais introduire la programmation fonctionnelle.
  • La programmation fonctionnelle s’affranchit de façon radicale des effets de bord en interdisant toute opération d’affectation. Les programmes ont également tendance à être plus concis. Vous tapez et typez moins : moins de frappes et moins d’endroits où le compilateur doit connaître le type de la variable, des arguments ou du retour. Ceci peut signifier beaucoup moins de code à gérer.

Quel est l’intérêt de F# ?

Le langage fonctionnel F# aide les développeurs à prendre en charge la simultanéité en encourageant des structures de données constantes qui peuvent être transmises entre les threads et les machines sans avoir à se soucier de la sécurité des threads ou de l’accès atomique. Il a également tendance à faciliter l’écriture de bibliothèques plus adaptées à la simultanéité telles que les flux de travail F# asynchrones.

Certaines améliorations importantes du Framework .Net notamment dans les génériques, LINQ, PLINQ et Futurs proviennent de l’application de concepts de programmation fonctionnelle et l’une des nouveautés du Framework 4.5 c’est l’introduction de la programmation asynchrone.

Donc pour ceux qui développent en C# ou VB.NET, sachez que vous faites presque de la programmation fonctionnellle sans vous en apercevoir !

Je note aussi que F# a un profil de performances similaire à C#. Cependant, il a un profil de performances bien supérieur aux langages concis comparables, en particulier les langages dynamiques et de script. Et, comme plusieurs des langages dynamiques, F# inclut les outils qui vous permettent d’explorer des données en écrivant des fragments de programmes et en les exécutant de façon interactive.

F# reste entièrement interopérable avec le reste de l’écosystème .NET, ce qui signifie que vous pouvez profiter de la majeure partie de la connaissance existante et de nombreux outils existants pour aider à introduire F# dans votre arsenal de codage.

Nouveautés F#3.0

Lors de la présentation de Don SYME, les nouveautés de la version 3.0 de F# ont été introduites.

On peut distinguer  3 niveaux.

Langage F# et compilateur

A l’évidence on ne peut pas penser à développer sans avoir une source de données où stocker nos informations. Maintenant avec F# on pourra accéder à nos diverses sources de données facilement. les types de providers ajouté sont les suivants

  • OData services
  • Database Connections
  • Database Schema
  • Web services
  • Resource files

Et au final on a ce joli schéma

Pour aller plus loin et savoir comment cela fonctionne, je vous invite à visiter le site MSDNhttp://msdn.microsoft.com/en-us/library/hh156509(v=vs.110).aspx

l’autre nouveautés c’est la possibilité de faire les Query Expressions tel que l’on voit en utilisant LINQ

/ A query expression.
let query1 = query { for customer in db.Customers do
                     select customer }

Environnement de développement

On a l’habitude de développer sur Visual Studio et donc vous dire que l’IntelliSense et le Parameter Help sont des nouveautés de visual F#3.0 ça vous paraîtra ridicule, mais cela reste un argument de plus pour vous lancer à faire du F#, cela peut nous aider à débuter par exemple.

Library F#

Etant données que l’accent a été mis sur les différents type de providers et l’accès aux données, alors il ne  faut pas s’étonner de voir que des classes de manipulation de données aient été ajoutées à la library F#:

Conclusion

A la fin de la présentation je me suis posée encore plus de questions, celle que j’ai retenu  est : Peut on faire des applications web avec F#? et comme google est mon ami, je lui ai posé la question,  il m’a répondu que Ouiiiiiiiiiiii c’est possible. Dans une des prochaines réunions de la communauté .Net, je présenterai un exemple d’application web écrit avec F#.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *