web-dev-qa-db-fra.com

Commentaires en ligne dans Ruby

Est-ce que Ruby est capable de comprendre les commentaires en ligne comme:

my_array = ['first', /* 'second', */ 'third', 'fourth']

?

Mettre à jour:

J'ai demandé non pas ce qui est/* */dans Ruby et pourquoi je reçois une erreur, mais la présence de commentaires en ligne sous quelque forme que ce soit./* */ont été donnés uniquement à titre d'exemple de commentaires en ligne que je connais.

31
Paul

Non, Ruby n'a pas de commentaires en ligne.

Les commentaires de ce style ont tendance à réduire la lisibilité, car ils rendent le code plus difficile à suivre.

Dans votre cas, il serait préférable de diviser vos éléments de tableau en plusieurs lignes et de commenter la ligne.

my_array = ['first',
#           'second',
            'third',
            'fourth']
30
Douglas F Shearer

Je voudrais juste ajouter que rdoc - le constructeur de documentation intégré à Ruby - peut utiliser les commentaires de votre code pour créer un ensemble initial de documentation. D'après ce que j'ai compris lors de mes dernières lectures, la "méthode Ruby" suggère que votre code doit être lisible et explicite, mais que les commentaires sont un moyen simple et précieux de créer de la documentation à un stade précoce du développement, avant d'envoyer un projet à une équipe de documentation appropriée.

En ce qui concerne les commentaires en ligne, mon cas d’utilisation est que je me retrouve à travailler sur des one-liners plus longs dans irb avant de les valider dans des fichiers source correctement formatés. Peut-être que beaucoup de gens ne voient pas d'inconvénient à travailler avec des sauts de ligne dans leur environnement de développement, mais compte tenu de ma connaissance limitée de l'ensemble des outils pour le moment, je trouve fastidieux de répéter les commandes précédentes. Je suis presque certain que cela est dû à mon incapacité à maîtriser les outils actuels, que ce soit irb, indiscrétion ou autre. Pour le moment, j'emballe le code que je souhaite commenter en ligne à l'intérieur d'un objet chaîne, que je dois ensuite supprimer ou "annuler le commentaire" en supprimant l'encapsuleur de chaîne.

À prendre ou à laisser, mais ce sont mes deux sous! Continuez à frotter!

Addenda:

C'est payant de lire la doc pry! Une méthode pry est liée à chaque objet, y compris main. Son appel exécute un sous-shell dans l'invite en cours qui vous permet d'analyser n'importe quel objet dans l'étendue actuelle. Il est disponible dans tous les contextes, y compris l'invite main pry. Couplé avec les commandes amend-line, edit, hist, play dans Pry, cela exprime mon désir de commentaires en ligne, même si je ne connais toujours aucune fonctionnalité dans pry qui chargerait une commande précédente dans l'entrée d'entrée de l'invite actuelle pour modification.

L'appel de l'éditeur de texte a tendance à me distraire un peu, non seulement parce qu'il supprime le contenu du tampon Shell de la visibilité sur un seul écran (par exemple, un ordinateur portable), mais surtout parce qu'il supprime tous les compléments et commandes pry utiles. Je voudrais voir un levier, ou un autre REPL, qui permet d'utiliser le curseur sur plusieurs lignes, car je suis toujours en train de trouver la nécessité d'utiliser des un-lignes.

1
Tony Zielinski

Pour être honnête, vous ne devriez pas utiliser de commentaires du tout, votre code devrait être explicite. 

Je sais que cela peut sembler hors sujet, mais écoutez-moi comme une suggestion, pourquoi ils ne mettront jamais en application ce genre de commentaires dans Ruby.

Je tombe sur cette question parce que je traite l’API laide de nos clients. La requête JSON traitée en code Ruby ressemble à ceci

api_response = {
  headers: ["uniq_id", "email", "description"]
  rows: [
    [2345, '[email protected]', 'first item'],
    [9876, '[email protected]', 'second item']
  ]
} 

Donc, dans mon script, je veux collecter tous les identifiants uniq:

JSON.parse(api_response)
  .fetch('rows')
  .collect { |application_row| application_row.at(0) }

ce serait bien d'avoir une certaine capacité à commenter ce que le at(0) va chercher. Comme sawa suggère dans son commentaire, si %c{} existait, je pourrais faire quelque chose comme ceci:

JSON.parse(api_response)
  .fetch('rows')
  .collect { |application_row|  %c{uniq_id}; application_row.at(0) }

... mais ensuite j'ai réalisé que je suis juste stupide. Le code de soi devrait expliquer mon intention

uniq_ids = JSON.parse(api_response)
             .fetch('rows')
             .collect { |application_row| application_row.at(0) }

Dans certains cas, ce n'est pas une option, alors peut-être que cela ferait l'affaire:

JSON.parse(api_response)
  .fetch('rows')
  .collect { |application_row| uniq_id = application_row.at(0) }

... oui, cela conduira à l'utilisation d'une variable locale inutilisée, mais dans ce cas, c'est correct, car la lisibilité du code serait avantageuse, car elle n'affecterait pas trop les performances.

dans le cas de Paul, il souhaite simplement supprimer un élément du tableau. Je suppose qu'il en veut probablement pour le débogage, mais l'idée générale est que Ruby vous oblige à écrire le code le plus propre possible et à supprimer tout ce qui ne sera pas utilisé en production.

solution pour cela pourrait être

my_array =  ['first']
# my_array += ['second']
my_array += ['third', 'fourth']

Est-ce moche? eh bien oui, c'est l'idée générale, c'est que vous devriez re-factoriser cela avant de vous engager, en vous obligeant à supprimer le code moche et à supprimer les éléments inutiles avant de commencer à produire.

0
equivalent8