
Les auteurs expliquent leurs choix
La mise sur pied d’un utilitaire de formatage de code pour langage de programmation demande d’opérer des choix. En effet, pour mener à bien leur tâche, les concepteurs de tels outils disposent de guides de style : de la costaude doc qui, dans certains cas, leur laisse la main libre pour donner une orientation particulière à un design. En mettant sur pied Black, un outil de formatage de code Python, les têtes derrière l’outil ont dû « choisir leur camp » sur certains points de la proposition d’amélioration numéro 8 (PEP 8) de Python. Décisions et explications …
Guillemets simples vs doubles
En Python, une donnée de type string est une suite quelconque de caractères délimitée soit par des guillemets droits simples, soit par des guillemets doubles ou même triples. Le texte de la PEP 8 ne fait pas de recommandations particulières à ce sujet et suggère même aux développeurs de « choisir une règle et de s’en tenir à cette dernière », chose que les concepteurs de Black ont faite.
« Black préfère les guillemets doubles aux simples. L’outil va remplacer les derniers par les premiers à condition que cela n’entraîne pas l’introduction de plus de séquences d’échappement [\\] qu’avant », écrivent-ils. En d’autres termes, du code qui contient la chaîne 'ceci est un test' devient "ceci est un test" après formatage. D’après les auteurs de l’outil, plusieurs raisons justifient ce choix de design. « La raison principale d’opter pour un unique choix de guillemets est d’ordre esthétique. En avoir un seul type dans tout le texte réduit la distraction du lecteur », expliquent-ils.
Les concepteurs de Black ajoutent que l’usage des guillemets doubles est plus cohérent avec le C qui est l’un des langages avec lequel Python interagit le plus. Tertio, disent-ils, l’usage des guillemets doubles permet d’anticiper sur les apostrophes au sein du texte. En sus, il faut prendre en compte les cas de gestion des chaînes de caractères vides. À ce propos, les auteurs de l’outil sont d’avis que l’utilisation de guillemets doubles se prête mieux à l’encadrement d’une chaîne de caractère vide. Il faut en effet remarquer dans ce cas de figure qu’une chaîne vide encadrée par des guillemets simples est susceptible d’être confondue à un guillemet double.
Les concepteurs de Black sont d’avis que l’option guillemets doubles est cohérente avec les recommandations de la proposition d’amélioration numéro 257 (PEP 257) de Python. Et pour cause, cette dernière stipule que l’on doit toujours faire usage d’un triplet de guillemets doubles autour de la docstring pour les besoins de cohérence. Illustration avec une portion de code Python contenant un docstring sur plusieurs lignes :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | def complex(real=0.0, imag=0.0): """Form a complex number. Keyword arguments: real -- the real part (default 0.0) imag -- the imaginary part (default 0.0) """ if imag == 0.0 and real == 0.0: return complex_zero ... |
On peut également évoquer la façon dont Black traite l’opérateur : au sein de celui d’indiçage []. A ce propos, les têtes derrière l’outil de formatage de code ont choisi d’implémenter les recommandations de la PEP8. Ces dernières stipulent que l’insertion d’espaces autour de l’opérateur : peut s’avérer nécessaire pour bien signifier que ce dernier est de plus faible priorité à côté d’autres insérés en même temps que lui au sein de l’opérateur d’indiçage. Ceci signifie que la ligne de code x = m[a+1:b] devient x = m[a + 1 : b] après formatage. Pour bien asseoir les subtilités des choix de l’équipe Black, illustration avec des portions de code au sein desquelles l’opérateur : est utilisé seul au sein de celui d’indiçage :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | $ cat test.py x = [1,2,3] print(x[1: 3]) $ black test.py test.py reformaté $ cat test.py x = [1, 2, 3] print(x[1:3]) |
L’outil requiert Python 3.6 au minimum pour tourner. Toutefois, d’après l’équipe de développeurs, il peut aussi servir au reformatage de code Python 2. Attention, Black est encore une bêta comme en témoigne le b au sein de son numéro de version (18.5b1).
Sources : GitHub, PEP 8, PEP 257
Et vous ?




Voir aussi :



Vous avez lu gratuitement 2 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.