Commentaires multilignes dans Ruby?

746

Comment puis-je commenter plusieurs lignes dans Ruby?

Mohit Jain
la source
7
Dans le cas où quelqu'un tombe sur cette recherche de commentaires multilignes dans les .ppmanifestes Puppet (qui est basé sur une syntaxe de type Ruby), vous pouvez utiliser des commentaires de bloc de style c /**/
msanford
6
Il est plutôt regrettable que les commentaires multilignes en ruby ​​ressemblent beaucoup à un bloc de code. Et compte tenu des points forts attribués à cette question (et de la réponse acceptée), les personnes travaillant sur la syntaxe rubis devraient clairement y réfléchir un peu.
Nick

Réponses:

1354
#!/usr/bin/env ruby

=begin
Every body mentioned this way
to have multiline comments.

The =begin and =end must be at the beginning of the line or
it will be a syntax error.
=end

puts "Hello world!"

<<-DOC
Also, you could create a docstring.
which...
DOC

puts "Hello world!"

"..is kinda ugly and creates
a String instance, but I know one guy
with a Smalltalk background, who
does this."

puts "Hello world!"

##
# most
# people
# do
# this


__END__

But all forgot there is another option.
Only at the end of a file, of course.
  • Voici à quoi cela ressemble (via capture d'écran) - sinon il est difficile d'interpréter à quoi ressembleront les commentaires ci-dessus. Cliquez pour agrandir :

Commentaires dans un éditeur de texte

Konstantin Haase
la source
26
Je préfère vraiment les utiliser #tous, principalement parce que cela sépare visuellement les lignes commentées mieux que =begin/ =endou en utilisant la méthode here-to. Et, beau travail.
The Tin Man
38
Il est intéressant de noter que cette réponse met en évidence certains défauts dans le surligneur de syntaxe.
ZoFreX
69
N'oubliez pas cela =beginet =endne pouvez être précédé d'aucun espace.
bergie3000
15
Et il n'est pas possible d'utiliser = begin = end au sein d'une méthode
Albert Català
7
Il est important de noter que dans l'exemple de code ci-dessus, seuls le premier =begin...=endet le dernier bloc utilisant #sont récupérés par rdoc lors de la génération de la documentation.
The Tin Man
126
=begin
My 
multiline
comment
here
=end
Adam Lear
la source
4
Bien sûr, vous pourriez le faire. Ça marche. C'est incroyablement rare. Je trouve ça moche. Peut-être que je suis coincé dans mes voies?
David J.
53
J'ai trouvé que si j'inclus un onglet avant = début ou = fin, les commentaires ne fonctionnent pas. Les caractères = begin et = end doivent être écrits au début de chaque ligne.
Rose Perrone
1
vous n'êtes pas seul @DavidJames. J'ai personnellement choisi de les faire tous commenter par mon éditeur. CMD + / ou ALT + / est la convention pour la plupart.
anon58192932
1
@DavidJames, que feriez-vous à la place? Tapez a #et espace avant chaque ligne? C'est beaucoup de touches, surtout si je commence à ajouter des sauts de ligne.
Paul Draper
57

Malgré l'existence de =beginet =end, la manière normale et plus correcte de commenter consiste à utiliser #des sur chaque ligne. Si vous lisez la source d'une bibliothèque ruby, vous verrez que c'est la façon dont les commentaires sur plusieurs lignes sont effectués dans presque tous les cas.

Rein Henrichs
la source
4
Vous pouvez obtenir des arguments sur la partie "plus correcte" de votre déclaration car elles sont toutes les deux valides. Je préfère utiliser #car c'est plus évident. Lorsque vous commentez du code, il est important de montrer clairement que c'est ce qui s'est produit. Si vous visualisez le code sans l'avantage de la coloration du code dans un éditeur, il =begin/=endpeut être difficile de comprendre pourquoi le code est ignoré.
The Tin Man
6
Bien sûr, il existe de nombreuses façons "valides" d'écrire des commentaires. Soyons pratiques ici. Si vous écrivez réellement Ruby et lisez ce que les autres écrivent, vous devriez utiliser des #commentaires. (Je suis mystifié pourquoi cela a eu deux downvotes. Je suppose que la communauté Stack Overflow doit parfois se tromper!)
David J.
4
3 == threedef three; 1 + 1 + 1 end. Par conséquent, les deux sont valides. On s'en fout? Utilisez 3!
David J.
1
@theTinMan Bien que cela soit vrai, généralement la seule fois où vous manquez de mise en évidence de la syntaxe (selon mon expérience) est lorsque vous utilisez visur un serveur de production. Dans ce cas, vous ne devriez probablement pas y faire votre développement de toute façon.
Parthian Shot
1
@DavidJames Votre exemple est ridicule car il est plus bavard. Mettre un hachage sur chaque ligne est plus détaillé pour les commentaires plus longs. Et si quelqu'un pense que la phrase "/ dev / urandom a été utilisée ici pour le PRNG non bloquant cryptographiquement sain. Ne touchez pas ce code - c'est magique" est ma tentative d'écrire ruby, je dirais que leur confusion provient plus de l'ignorance sur leur en partie que le manque de clarté sur le mien. Ce qui ne veut pas dire que votre point est toujours invalide - c'est juste un bon point lorsque vous commentez du code. Mais si votre commentaire est juste ... un commentaire ... il devrait être clair de toute façon.
Parthian Shot
20
#!/usr/bin/env ruby

=begin
Between =begin and =end, any number
of lines may be written. All of these
lines are ignored by the Ruby interpreter.
=end

puts "Hello world!"
miku
la source
1
+1 parce que je n'avais aucune idée que l'imbrication était une chose dans les commentaires multilignes Ruby.
Parthian Shot
2
@ParthianShot - Ce n'est pas une chose - = début et = fin sont ignorés sinon au début d'une ligne. L'imbrication ne semble pas possible.
skagedal
L'imbrication d'un commentaire à l'intérieur d'un commentaire entraînerait soit un seul commentaire, soit une erreur de syntaxe d'essayer de terminer un commentaire là où il n'y a pas de commentaire à terminer. /*I am a\n#nested\ncomment, which really serves no purpose*/ /*I am bound /*to*/ FAIL!*/Cela peut avoir du sens si vous avez des commentaires sur une seule ligne et du code à l'intérieur d'un commentaire multiligne, comme une fonction avec une documentation que vous ne voulez pas que les gens utilisent, mais vous ne voulez pas non plus le supprimer du fichier.
Chinoto Vokro
17

En utilisant soit:

= commencer
Cette
est
une
commentaire
bloquer
= fin

ou

# Cette
# est
# une
# commentaire
# bloquer

sont les deux seuls actuellement pris en charge par rdoc, ce qui est une bonne raison de ne les utiliser que je pense.

l'homme d'étain
la source
1
Une autre bonne raison de s'en tenir à =beginou #est que les deux <<-DOCet les "syntaxes généreront des littéraux de chaîne inutiles à l'exécution.
Cœur
13
=begin
(some code here)
=end

et

# This code
# on multiple lines
# is commented out

sont tous les deux corrects. L'avantage du premier type de commentaire est la possibilité de modification - il est plus facile de décommenter car moins de caractères sont supprimés. L'avantage du deuxième type de commentaire est la lisibilité - en lisant le code ligne par ligne, il est beaucoup plus facile de dire qu'une ligne particulière a été mise en commentaire. Votre appel, mais pensez à qui vient après vous et à quel point il est facile à lire et à maintenir.

La-comadreja
la source
IMO, =beginet =endne transmet pas visuellement que ce qui est entre les deux est un commentaire ... Clojure, par exemple, utilise (comment :whatever)ce qui, au conduit, dit ce que cela signifie: stackoverflow.com/questions/1191628/block-comments-in-clojure
David J.
1
Ni "/ *" ni "* /" en Java, C et C ++. Comme avec la syntaxe Ruby, de gros blocs de code peuvent être commentés entre ces deux caractères, et tous ceux qui connaissent les bases du langage savent ce qu'ils signifient.
La-comadreja
1
La coloration de la syntaxe (dans vim, par exemple) montre que le premier type est un commentaire. Dans ce cas, le premier type n'a aucun inconvénient.
Camille Goudeseune
12

Voici un exemple :

=begin 
print "Give me a number:"
number = gets.chomp.to_f

total = number * 10
puts  "The total value is : #{total}"

=end

Tout ce que vous placez entre =beginet =endsera traité comme un commentaire, quel que soit le nombre de lignes de code qu'il contient entre.

Remarque: assurez-vous qu'il n'y a pas d'espace entre =et begin:

  • Correct: =begin
  • Faux: = begin
Prabhakar Undurthi
la source
5

=begin comment line 1 comment line 2 =end assurez-vous que = begin et = end est la première chose sur cette ligne (pas d'espaces)

anandharshan
la source
2

Si quelqu'un cherche un moyen de commenter plusieurs lignes dans un modèle html dans Ruby on Rails, il peut y avoir un problème avec = begin = end, par exemple:

<%
=begin
%>
  ... multiple HTML lines to comment out
  <%= image_tag("image.jpg") %>
<%
=end
%>

échouera à cause de%> la fermeture de l'image_tag.

Dans ce cas, il est peut-être discutable qu'il s'agisse d'un commentaire ou non, mais je préfère entourer la section indésirable d'un bloc "si faux":

<% if false %>
  ... multiple HTML lines to comment out
  <%= image_tag("image.jpg") %>
<% end %>

Cela fonctionnera.

user2553863
la source
0
  def idle
    <<~aid
    This is some description of what idle does.

    It does nothing actually, it's just here to show an example of multiline
    documentation. Thus said, this is something that is more common in the
    python community. That's an important point as it's good to also fit the
    expectation of your community of work. Now, if you agree with your team to
    go with a solution like this one for documenting your own base code, that's
    fine: just discuss about it with them first.

    Depending on your editor configuration, it won't be colored like a comment,
    like those starting with a "#". But as any keyword can be used for wrapping
    an heredoc, it is easy to spot anyway. One could even come with separated
    words for different puposes, so selective extraction for different types of
    documentation generation would be more practical. Depending on your editor,
    you possibly could configure it to use the same syntax highlight used for
    monoline comment when the keyword is one like aid or whatever you like.

    Also note that the squiggly-heredoc, using "~", allow to position
    the closing term with a level of indentation. That avoids to break the visual reading flow, unlike this far too long line.
    aid
  end

Notez qu'au moment de la publication, le moteur stackoverflow ne rend pas correctement la coloration de la syntaxe. Tester le rendu dans l'éditeur de votre choix est considéré comme un exercice. ;)

psychoslave
la source