• [^] # Re: Le cas goto

    Posté par . En réponse au journal Apple, le SSL les goto et les accolades. Évalué à 10.

    Et là quand je vois ça (http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Scope_Guard) ou le ON_BLOCK_EXIT je me dis que c'est bien lourd pour un truc qui se fait facilement avec un do et un break, même si c'est pas la "bonne" façon de faire.

    Moi c'est quand je vois le ce code là :

    https://linuxfr.org/users/flagos/journaux/apple-le-ssl-les-goto-et-les-accolades#comment-1522135

    Que j'ai peur.

    • On perd énormément en lisibilité. On fait un gros hack sale avec une boucle pour contourner une limitation du langage.
    • On perd en maintenabilité. Si tu as une boucle dans ton traitement ce n'est plus un simple break qu'il faut utiliser. On utilise des cas particuliers qui doivent être maintenu (le while(0)). Tu peut facilement avoir un outil d'analyse statique qui t'explique que ta boucle ne sert à rien car la condition est toujours fausse...

    En effet c'est simple dans le sens ou on fait le truc avec sa bite et son couteau, mais ça cache une complexité à l'usage qui n'est pas à négliger à mon avis. Je suis d'accord que le ScopeGuard est loin d'être parfait parce qu'il a tendance à séparer dans 2 endroits trop distincts le code et la gestion d'erreur, de plus je ne sais pas si tu n'arrive pas facilement à des undefined behaviour en cas par exemple d'exception dans le destructeur.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)