Posté par kantien .
En réponse au journal Is return the new goto ?.
Évalué à 5.
Dernière modification le 28 janvier 2024 à 11:03.
L’expression que tu donnes en exemple ci-dessus, tu considères qu’elle relève de l’expression ou de l’instruction ?
Thomas t'as répondu sur le reste, je ne reviendrais donc que sur cette question. Quand je dis que c'est orienté expression, c'est que l'on ne code pas en pensant au fait que cela sera traduit en instruction pour une machine (c'est le travail du compilateur de faire cela) mais que l'on a des expressions, définies les unes à partir des autres, que l'on cherche à évaluer. L'exécution du programme ne consistant qu'en l'évalutation de ces expressions.
La construction if true then 2 else 3 est une expression au même titre que n'importe qu'elle entier, et qui s'évalue ici à 2. Et je peux l'utiliser ainsi :
(iftruethen2else3)+1;;-:int=3
Lorsque l'on définit une fonction comme foo, on explique juste comment évaluer une expression à partir d'une autre donnée en paramètre. Ainsi, on a :
(footrue)+1;;-:int=3(foofalse)+1;;-:int=4
Il n'y a pas besoin de return explicite, parce que le modèle de calcul veut que lorsque une fonction en appel une autre (ce qui est aussi un saut dans le code) elle retourne (encore un saut) avec la valeur de l'expression qu'elle a évaluée.
Après, si on veut signifier cet aller-retour entre en l'appelant et l'appelé via un return et un bind (pour décrire ce que fera l'appelant de la valeur retournée), on aboutit à la structure de monade décrite plus haut, structure qui, si on analyse son fonctionnement, mène à la notion d'effets ;-) (voir les futurs leçons de Xavier Leroy sur le sujet).
Dans le cas de la monade d'erreurs (les exceptions à la sauce Rust), le code du bind est le suivant :
letbindxf=matchxwith|Okv->fv|Error_ase->e
Autrement dit, sa sémantique est la propagation des exceptions : si on reçoit une valeur on la traite, sinon on retourne l'erreur reçue au code appelant supérieur, jusqu'à ce qu'il y en ait un qui la traite. ;-)
On aboutit alors à des notions bien mieux structurées qu'un simple goto pour gérer les sauts dans le code. ;-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: goto return cave
Posté par kantien . En réponse au journal Is return the new goto ?. Évalué à 5. Dernière modification le 28 janvier 2024 à 11:03.
Thomas t'as répondu sur le reste, je ne reviendrais donc que sur cette question. Quand je dis que c'est orienté expression, c'est que l'on ne code pas en pensant au fait que cela sera traduit en instruction pour une machine (c'est le travail du compilateur de faire cela) mais que l'on a des expressions, définies les unes à partir des autres, que l'on cherche à évaluer. L'exécution du programme ne consistant qu'en l'évalutation de ces expressions.
La construction
if true then 2 else 3est une expression au même titre que n'importe qu'elle entier, et qui s'évalue ici à2. Et je peux l'utiliser ainsi :Lorsque l'on définit une fonction comme
foo, on explique juste comment évaluer une expression à partir d'une autre donnée en paramètre. Ainsi, on a :Il n'y a pas besoin de
returnexplicite, parce que le modèle de calcul veut que lorsque une fonction en appel une autre (ce qui est aussi un saut dans le code) elle retourne (encore un saut) avec la valeur de l'expression qu'elle a évaluée.Après, si on veut signifier cet aller-retour entre en l'appelant et l'appelé via un
returnet unbind(pour décrire ce que fera l'appelant de la valeur retournée), on aboutit à la structure de monade décrite plus haut, structure qui, si on analyse son fonctionnement, mène à la notion d'effets ;-) (voir les futurs leçons de Xavier Leroy sur le sujet).Dans le cas de la monade d'erreurs (les exceptions à la sauce Rust), le code du
bindest le suivant :Autrement dit, sa sémantique est la propagation des exceptions : si on reçoit une valeur on la traite, sinon on retourne l'erreur reçue au code appelant supérieur, jusqu'à ce qu'il y en ait un qui la traite. ;-)
On aboutit alors à des notions bien mieux structurées qu'un simple
gotopour gérer les sauts dans le code. ;-)Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.