• [^] # Re: goto return cave

    Posté par . En réponse au journal Is return the new goto ?. Évalué à 4. Dernière modification le 30 janvier 2024 à 00:42.

    Quel langage est le plus « pur » parmi les langage fonctionnels ?

    Tu le cites juste après c'est Haskell. ;-) Il y a des traits impératifs dans tous les autres (si on oublie ceux à types dépendants), OCaml y compris. Tu ne peux pas faire d'entrée-sortie en Haskell sans passer par le monade IO, toutes les valeurs sont immuables, aucun effet de bords...

    En parlant de monade et de ton return LISP qui ne va pas n'importe où : oui il saute à l'entrée où le code de la fonction avait été appelé, mais sans son double correspondant, le bind, c'est une structure de contrôle qui ne vaut pas grand chose.

    Ce qui me semble pathologique, par exemple, c'est la gestion des erreurs en go où l'on voit répéter à longueur de code le même pattern:

    if err != nil {
     do_this;
     do_that;
    }

    Voilà ce que fait une code appelant du retour qu'il reçoit après un calcul qui peut échouer : c'est son bind. ;-)

    Quand tout est expression, ce motif est aussi une expression, qui peut alors devenir paramètre formel d'une autre expression, d'où le bind de la monade d'erreur :

    let bind x f = match x with
     | Ok v -> f v
     | Error _ as e -> e

    On l'écrit une bonne fois pour toute et il n'est plus nécessaire de le recopier des centaines de fois à longueur de code, ce qui relève de la pathologie malsaine. ;-)

    On peut alors, dans son code, se concentrer sur la partie importante : que faire du résultat quand on en a un ? On n'attrape alors qu'en toute fin de fonction les erreurs que l'on veut attraper si l'on souhaite en gérer certaines au lieu de disséminer cela dans tous les sens dans le corps de la fonction. ;-)

    En résumé : les programmeurs go utilise le bind de la monade identité quand il travaille dans la monade d'erreurs, ce qui rend leur code de gestion d'erreurs totalement imbitable dès qu'il y en a plusieurs qui s'enchainent.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.