Ruby'de Çok Satırlı Yorumlar?


746

Ruby'de birden çok satıra nasıl yorum yapabilirim?


7
Herkes bu kukla .ppmanifestolarda (Ruby benzeri bir sözdizimine dayanarak) çok satırlı yorum aramaya düşerse, c tarzı blok yorumları kullanabilirsiniz /**/
msanford

6
Ruby'deki çok satırlı yorumların bir kod bloğuna çok benzemesi oldukça talihsiz bir durumdur. Ve bu soruya verilen yüksek puanlar (ve kabul edilen cevap) göz önüne alındığında, yakut sözdizimi üzerinde çalışan insanlar açıkça biraz düşünmelidir.
Nick

Yanıtlar:


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.
  • Görünüşü (ekran görüntüsü aracılığıyla) - aksi takdirde yukarıdaki yorumların nasıl görüneceğini yorumlamak zordur. Yakınlaştırmak için tıklayın :

Bir metin düzenleyicideki yorumlar


26
Gerçekten #hepsinin üzerinde kullanmayı tercih ederim , çünkü yorum satırlarını görsel olarak daha iyi =begin/ =endveya burada-yöntemini kullanarak ayırır . Ve iyi iş çıkardın.
Tin Man

38
Bu cevabın sözdizimi vurgulayıcıdaki bazı kusurları belirgin hale getirmesi ilginçtir.
ZoFreX

69
Bunu unutma =beginve =endöncesinde herhangi bir boşluk olamaz.
bergie3000

15
Ve bir yöntem içinde = begin = end kullanmak mümkün değildir
Albert Català

7
Yukarıdaki örnek kodda, dokümantasyon oluşturulurken yalnızca ilk =begin...=endve son blok #kullanımının rdoc tarafından toplandığına dikkat etmek önemlidir .
Tin Man

126
=begin
My 
multiline
comment
here
=end

4
Elbette, bunu yapabilirsin . İşe yarıyor. Bu inanılmaz derecede nadir. Çirkin buluyorum. Belki kendi yolumda takılı kaldım?
David J.

53
Ben = bir sekme daha önce eklerseniz = başlangıç ​​veya = bitiş, yorum işe yaramadı buldum. = Begin ve = end her birinin her satırın başında yazılması gerekir.
Gül Perrone

1
@DavidJames yalnız değilsin. Ben şahsen editörüm tarafından yorum yapılmasını tercih ettim. CMD + / veya ALT + / çoğu için kuraldır.
anon58192932

1
@DavidJames, bunun yerine ne yapardınız? #Her satırdan önce a ve boşluk yaz? Özellikle satır sonları eklemeye başlarsam birçok tuş vuruşu olur.
Paul Draper

57

Varlığına rağmen =beginve =endnormal ve yorumuna daha doğru bir şekilde kullanmaktır #'her satırda bu. Herhangi bir yakut kütüphanesinin kaynağını okursanız, neredeyse tüm durumlarda çok satırlı yorumların bu şekilde yapıldığını göreceksiniz.


4
İkinizin de geçerli olması nedeniyle ifadenizin "daha doğru" kısmı hakkında bağımsız değişkenler alabilirsiniz. Kullanmayı tercih ederim #çünkü daha açık. Kodu yorumlarken, bunun ne olduğunu açıklığa kavuşturmak önemlidir. Kodu bir düzenleyicide kod renklendirme avantajı olmadan görüntülüyorsanız, kodun =begin/=endneden göz ardı edildiğini anlamanız zor olabilir.
Tin Man

6
Elbette, yorum yazmanın birçok "geçerli" yolu vardır. Burada pratik olalım. Gerçekten Ruby yazarsanız ve başkalarının yazdıklarını okursanız, #yorumları kullanmalısınız . (Bunun neden iki downvotes olduğunu merak ediyorum. Sanırım Stack Overflow topluluğu bazen yanlış yapmak zorunda!)
David J.

4
3 == threenerede def three; 1 + 1 + 1 end. Bu nedenle her ikisi de geçerlidir. Kimin umrunda? Kullanın 3!
David J.

1
@theTinMan Doğru olsa da, genel olarak sözdizimi vurgulamasından (deneyimimde) yoksun kalacağınız tek zaman vi, bir üretim sunucusunda kullandığınız zamandır . Bu durumda, muhtemelen gelişiminizi orada yapmamalısınız.
Parthian Shot

1
@DavidJames Örneğiniz gülünç çünkü daha ayrıntılı. Her satıra bir hash koymak, daha uzun yorumlar için daha ayrıntılıdır. Ve eğer kimse "/ dev / urandom ifadesinin burada engellemeyen kriptografik olarak sağlam PRNG için kullanıldığını düşünürse. Bu koda dokunmayın - bu sihirdir" benim yakut yazma girişimimdir, karışıklıklarının daha fazla cehaletten kaynaklandığını iddia ediyorum. benim için netlik eksikliğinden daha fazla. Bu demek değil ki puan her zaman geçersiz - sadece iyi bir kod yorum yaparken. Ama yorumunuz sadece ... yorum ise ... her iki şekilde de net olmalıdır.
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!"

1
+1, çünkü iç içe geçmenin Ruby çok satırlı yorumlarında bir şey olduğu hakkında hiçbir fikrim yoktu.
Parthian Shot

2
@ParthianShot - Bir şey değil - = başlangıç ​​ve = son satırın başında değilse yok sayılır. Yerleştirme mümkün görünmüyor.
skagedal

Bir yorumun bir yorumun içine yerleştirilmesi, tek bir yorumun veya söz konusu bir sözdizimi hatasının sona erdirilecek yorum bulunmayan bir yorumu sonlandırmaya çalışmasına neden olur. /*I am a\n#nested\ncomment, which really serves no purpose*/ /*I am bound /*to*/ FAIL!*/İnsanların kullanmasını istemediğiniz belgelere sahip bir işlev gibi çok satırlı bir yorumun içinde tek satırlı yorumlarınız ve kodunuz varsa mantıklı olabilir, ancak bunu dosyadan kaldırmak da istemezsiniz.
Chinoto Vokro

17

İkisinden birini kullanarak:

= başlayacak
Bu
dır-dir
bir
yorum Yap
blok
= bitiş

veya

# Bu
# dır-dir
# a
# yorum Yap
# blok

şu anda rdoc tarafından desteklenen tek ikisi, sadece bence bunları kullanmak için iyi bir neden.


1
İçin sopa başka iyi bir neden =beginveya #her ikisi olmasıdır <<-DOCve "sözdizimi idam yararsız dize hazır üretecektir.
Cur

13
=begin
(some code here)
=end

ve

# This code
# on multiple lines
# is commented out

ikisi de doğrudur. İlk yorum türünün avantajı düzenlenebilirliktir - daha az karakter silindiği için rahatsız edilmesi daha kolaydır. İkinci yorum türünün avantajı okunabilirliktir - kodu satır satır okumak, belirli bir satırın yorumlandığını söylemek çok daha kolaydır. Çağrınız ama peşinizden kimin geldiğini ve onların okumasının ve bakımının ne kadar kolay olduğunu düşünün.


IMO =beginve =endgörsel olarak aradaki şeyin bir yorum olduğunu aktarmayın ... Clojure, örneğin, (comment :whatever)olası satışlarda bunun ne anlama geldiğini
David J.

1
Java, C ve C ++ 'da da "/ *" ve "* /" kullanmayın. Ruby sözdiziminde olduğu gibi, bu iki karakter arasında büyük kod blokları yorumlanabilir ve dilin temellerini bilen herkes ne anlama geldiğini bilir.
La-comadreja

1
Sözdizimi renklendirme (örneğin vim'de), ilk türün bir yorum olduğunu gösterir. Bu durumda, ilk türün dezavantajları yoktur.
Camille Goudeseune

12

İşte bir örnek :

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

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

=end

Her şey arasına yerleştirmek =beginve =endolursa olsun arasına içerir kaç kod satırları bir yorum olarak kabul edilir.

Not:= ve arasında boşluk olmadığından emin olun begin:

  • Doğru: =begin
  • Yanlış: = begin

5

=begin comment line 1 comment line 2 =end = begin ve = end'in bu satırdaki ilk şey olduğundan emin olun (boşluk yok)


2

Birinin Ruby on Rails içindeki bir html şablonunda birden çok satırı yorumlamanın bir yolunu araması durumunda = begin = end ile ilgili bir sorun olabilir, örneğin:

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

%> image_tag'in kapatılması nedeniyle başarısız olur.

Bu durumda, belki bu yorum ya da yorum olup olmadığını tartışılabilir, ama ben istenmeyen bölümü bir "eğer yanlış" blok ile kapsama tercih:

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

Bu çalışacak.


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

Gönderi anında, yığın akışı motorunun sözdizimi renklendirmesini doğru şekilde oluşturmadığını unutmayın. Seçim editörünüzde nasıl işlediğini test etmek bir alıştırma olarak izin verilir. ;)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.