ZerosquareLe 10/11/2014 à 13:09
Je connais trois façons de faire ça :
- les if() imbriqués, mais ça devient vite illisible. Certains diront que si tu as plus de 5/6 étapes, il faut de toute façon splitter en plusieurs fonctions, mais je ne suis pas d'accord (pour moi, c'est contreproductif de créer des fonctions qui ne sont appelées qu'une fois et qui sont indissociables d'une autre fonction : ça éparpille le code, et comme on ne peut pas partager de variables locales on doit les passer en paramètres et c'est lourd)
- utiliser une ou des variables de contrôle (par exemple, un booléen isOK qui indique s'il faut que l'exécution continue). Ça évite les goto et les points de sortie multiples, qui sont interdits dans certaines normes, mais je trouve ça dangereux : on a vite fait d'oublier de mettre à jour ou de tester ces variables annexes.
- la solution à base de goto, que je privilégie. Ça fait hurler les intégristes, mais pour moi c'est le moins risqué et le plus lisible si c'est bien fait.
C'est pour ça que je parlais d'un équivalent de atexit() pour les fonctions, ça permettrait d'éviter tout ce bazar crade et de pouvoir faire un return() où on veut tout en étant certain que le "nettoyage" sera effectué.