URL: https://linuxfr.org/users/echarp/journaux/la-plus-belle-ligne-de-code Title: La plus belle ligne de code Authors: echarp Date: 2023年10月13日T22:24:15+02:00 License: CC By-SA Tags: code, programmation, méthodologie, return_early_pattern et code_hadouken Score: 31 Je voulais partager avec vous la plus belle ligne de code que je connaisse: ```javascript if (condition) return ``` Voilà, simple, efficace. On peut exprimer la même chose un peu différemment, en profitant de ruby par exemple: ```ruby return if condition ``` ou encore: ```ruby return unless autreCondition ``` C'est beau n'est ce pas? Bien sûr cela ne fait pas grand chose, il faut même considérer que cela ne fait rien, ou plutôt, cela arrête ou empêche de faire, avec ce `return` indispensable. D'ailleurs vous pourrez remarquer qu'il vaut mieux mettre cette ligne avant d'autres, sinon elle n'a absolument aucune utilité, ce qui la rendrait bien peu intéressante. ```java if (objetDeTravail == null) return; objetDeTravail.callOtherMethod(); objetDeTravail.callYetAnotherMethod(); ``` Ah oui, là vous pouvez remarquer un usage très fréquent de ce type de clause, en java => s'assurer que l'on n'appelle pas une méthode sur un objet `null`. Ce qui enclenche une malédiction malfaisante sur la malheureuse machine où s'exécute ce malheureux code. On pourrait exprimer la même chose sans utiliser notre belle ligne de code avec son `return` si bien placé, cela donne alors quelque chose comme ça: ```java if (objetDeTravail != null) { objetDeTravail.callOtherMethod(); objetDeTravail.callYetAnotherMethod(); } ``` C'est fou non? On voit de mieux en mieux ce qu'apporte notre magnifique ligne: moins d'accolades, de begin/end, d'indentations! :-) Mais, certaines recommandations de style enjoignent, ou enjoignaient, à ce que le code qui n'a qu'un point d'entrée n'ait aussi qu'un seul point de sortie. Afin de proposer une lecture la plus linéaire possible. Ce qui pouvait donner ce genre de construction: ```python def methodeLineaire: result = "" if condition: result = "autre résultat" return result ``` Alors que franchement: ```python def methodePlusBelle: if not condition: return "" return "autre résultat" ``` Moins de variable, moins de potentiels `else`, on teste et on sort vite, une fois ou plusieurs s'il le faut. Car oui, on peut multiplier cette belle ligne, on rajoute des conditions de sortie autant de fois que nécessaire! Un des effets notables de ce style de code, avec des clauses qui bloquent l'exécution le plus tôt possible, c'est que l'on découvre des points pivot dans notre code, que l'on peut transformer en méthode protégées par ces "gardes". Parois des centaines ou des milliers de lignes s'accumulent et se regroupent, mystérieusement, dans une seule méthode. Des enchaînements de blocs de code, avec des chemins d'exécution un peu compliqués, des duplications ici et là, des conditions très complexes, des variables utilisées du début à la fin mais pour des usages différents, des boucles contenant des boucles contenant des boucles, une horreur à relire et à maintenir. Promis, je n'ai jamais jamais fait ce genre de code personnellement⸮ Pour sortir de cet enfer on peut justement se concentrer sur ces pivots, ces chemins d'exécution qui sont "protégés" par des conditions peut-être un peu mal organisées. Souvent le plus simple est d'étudier les blocs de code dans leur profondeur. Car oui, une méthode constituée de milliers de lignes de code est souvent _aussi_ très **profonde**: elle contient des boucles contenant des conditions avec d'autres boucles et conditions imbriquées, sur tellement de niveaux que si le code est bien indenté, et bien on a besoin de faire défiler la vue horizontalement! /o\ Ces blocs de code tout en profondeur sont souvent de bons candidats pour être "promus" dans leur propre méthode. On les enferme dans leur propre boite, et avec un nommage décent on rend tout ce plat de spaghettis un peu plus digeste! Je crois que, de plus en plus, les programmeurs cherchent à grandement limiter la profondeur de leur programme, pour le rendre plus lisible et plus maintenable. Et je constate que ça marche bien. On obtient du code aéré, bien découpé, élégant! Il est si beau ce code, je voudrais le garder pour moi et ne jamais le pousser sur le dépôt central... dans la grande jungle de l'équipe des développeurs, où il risque tellement de tomber sur un moi d'il y a vingt ans!

AltStyle によって変換されたページ (->オリジナル) /