• [^] # Re: goto return cave

    Posté par . En réponse au journal Is return the new goto ?. Évalué à 7.

    Le message de Linus, sur l'absence d'instruction break pour sortir prématurément d'une boucle en Pascal, me rappelle la situation de ceux qui utilisent pas mal le style impératifs en OCaml. Ils ont demandé plusieurs d'avoir cette primitive sur le bugtracker mais n'ont toujours pas eu gain de cause. Pour l'instant, il faut passer par des exceptions pour faire ça.

    Au lieu de :

    for ... do
     do_A;
     do_B;
     if cond then break;
    done

    il faut faire un truc du genre :

    try for ... do
     do_A;
     do_B;
     if cond then raise Break;
    done
    with Break -> do_check

    Bon dans le fond ça change rien, les exceptions en OCaml c'est un jump (à la manière des exceptions en C via goto), mais ça rendrait le code peut être plus clair avec un break.

    Sinon pour revenir au journal, en programmation fonctionnelle ce n'est pas forcément la dernière valeur qui est retournée. C'est juste que c'est un style orienté expression et non instruction.

    Dans le code suivant :

    let foo cond = if cond then 2 else 3

    la valeur retournée dépend du booléen est peut être 2 ou 3. Ça équivaut à ce code :

    (* return est juste la fonction identité *)
    let return x = x
    (* le même code qu'avant *)
    let foo cond = if cond then return 2 else return 3

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