Envoyé par
Trap D
Jedaï >> Que signifie exactement cette expression de "sucre syntaxique" qu'on retrouve à tout bout de champ dans le monde fonctionnel
cf « Syntactic sugar causes cancer of the semi-colon. »
Le "sucre syntaxique" n'est pas du tout spécifique du "monde fonctionnel", on peut en trouver dans n'importe quel langage. Il s'agit d'une syntaxe qui n'est là que pour la convenance du programmeur, mais qui est en réalité traduite pour le compilateur en une forme plus régulière mais moins agréable à l'oeil/pratique.
Linq est un tel sucre syntaxique parce qu'il s'agit d'une syntaxe entièrement nouvelle (et qui ne correspond pas au reste du langage) qui est en fait traduite en sous main par des appels de méthodes. L'exemple canonique du sucre syntaxique, c'est les "list comprehension", autrement dit les générateurs de listes, qui se présentent sous différentes formes dans un nombre croissant de langage. Haskell a été l'un des premier à les introduire, et ils s'y présentent sous cette forme :
[ (a,b,c) | a<-[1..998], b<-[a..999], c<-[b..1000], a^2 + b^2 == c^2, a+b+c == 1000]
génère la liste des triplets pythagoricien dont la somme des membres est 1000 (il n'y en a qu'un seul à vrai dire). (ce code est très naïf, ce n'est qu'un exemple)
Ce code peut-être "désucré", et c'est sous cette forme plus régulière qu'il sera en réalité compilé.
[ x^2 | x<-[1..1000], even x]
est ainsi traduit en :
map (^2) $ filter even $ enumFromTo 1 1000
à peu près (pas tout à fait mais presque).
--
Jedaï
Partager