Les virgules de Perl sont-elles une mauvaise pratique?

Aujourd’hui, j’étais dans une réunion Webex montrant mon écran avec du code Perl que j’ai écrit. Mon patron m’a soudainement dit que tout le monde regardait et entendait que je devais retirer les virgules de fin de mes structures de hachage et de tableau car c’est une mauvaise pratique. J’ai dit que je ne pensais pas que c’était une mauvaise pratique en Perl, mais il a insisté et m’a fait supprimer ces virgules juste pour montrer mon script en cours d’exécution dans la réunion.

Je pense toujours que ce n’est pas une mauvaise pratique en Perl, mais je peux me tromper. Je les trouve en fait très pratiques et pratiques car ils m’empêchent d’append de nouveaux éléments et d’oublier d’append la virgule correspondante dans le processus.

Mais, j’aimerais vraiment savoir si c’est une bonne ou une mauvaise pratique et pouvoir montrer à mon patron (s’il a tort) de bons arguments et même de bonnes sources pour mes arguments.

Alors, est-ce une mauvaise pratique de laisser des virgules?

Ceci est un exemple:

my $hash_ref = { key1 => 'a', key2 => 'b', key3 => 'c', }; my $array_ref = [ 1, 2, 3, ]; 

C’est une bonne pratique d’avoir la virgule finale. Larry l’a ajouté à cause d’une erreur commune qu’il a constatée chez les programmeurs. Quand ils ont ajouté des éléments à une liste (ou quelle que soit leur langue), ils ont oublié le caractère séparateur. Perl autorise expressément la virgule finale. Ce n’est pas un caprice ou un effet secondaire de quelque chose d’autre.

Ce qui est une mauvaise pratique, cependant, est de distraire une réunion pleine de gens avec quelque chose que votre patron aurait pu corriger plus tard. À moins que la réunion ne soit spécifiquement une revue de code, votre patron a perdu beaucoup de temps. J’ai toujours souhaité que, pour participer à une vidéoconférence, vous deviez entrer votre rémunération à la minute afin qu’un compteur apparaisse sur tous les écrans pour montrer combien d’argent était gaspillé. Dépenser quelques centaines de dollars à regarder les virgules que vous supprimez sur un programme de travail aurait pour effet d’empêcher ces bêtises.

Ainsi, la page PBP mentionnée par Miller plaide en faveur de la réorganisation de la liste en coupant et en collant des lignes; Le document de style de codage mod_perl lié par Borodin milite pour éviter une erreur de syntaxe momentanée lorsque vous ajoutez des éléments.

Beaucoup plus important que l’un ou l’autre, à mon avis, est que si vous avez toujours une virgule de fin et que vous ajoutez une ligne, le diff ne montre que la ligne que vous avez ajoutée et les lignes existantes restnt inchangées. Cela rend la recherche de reproches meilleure et rend les diffs plus lisibles.

Le document de style de codage Apache mod_perl dit ceci

Chaque fois que vous créez une liste ou un tableau, ajoutez toujours une virgule après le dernier élément. La raison en est qu’il est fort probable que de nouveaux éléments seront ajoutés à la fin de la liste à l’avenir. Si la virgule est manquante et que ce n’est pas remarqué, il y aura une erreur.

Ce que votre responsable a peut-être pensé, c’est que faire la même chose en C est non standard et non portable, cependant, son comportement extraordinaire n’est pas une excuse.

C’est en effet une bonne pratique et également mentionnée dans le célèbre PBP.

Il y a en fait une politique pour perlcritic qui m’obtient toujours: https://metacpan.org/pod/Perl::Critic::Policy::CodeLayout::RequireTrailingCommas

Je privilégie les virgules, bien que je sois plutôt impopulaire et semble irriter les dyslexiques. Je n’ai pas non plus été en mesure de trouver une option perltidy pour cela. Il corrige également le problème de changement de ligne (à l’exception de la première ligne, mais ce n’est généralement pas celle qui a été modifiée dans mon expérience), et j’adore la façon dont les virgules s’alignent dans les colonnes ordonnées. Cela fonctionne aussi dans les langages qui sont indépendants des espaces mais qui n’aiment pas les virgules sur les listes. Je pense avoir appris ce modèle en travaillant avec javascript …

 my $hash_ref = { key1 => 'a' , key2 => 'b' , key3 => 'c' }; my $array_ref = [ 1 , 2 , 3 ];