Komentar Multi-Baris di Ruby?

746

Bagaimana saya bisa mengomentari banyak baris di Ruby?

Mohit Jain
sumber
7
Jika ada orang yang .ppmenyukai komentar multiline dalam manifestasi Wayang (yang didasarkan pada sintaksis mirip-Ruby), Anda dapat menggunakan komentar blokir gaya-c /**/
msanford
6
Sangat disayangkan bahwa komentar multiline di ruby ​​terlihat sangat mirip blok kode. Dan mengingat poin tinggi yang diberikan untuk pertanyaan ini (dan jawaban yang diterima) orang-orang yang bekerja pada sintaks ruby ​​harus dengan jelas berpikir sedikit tentangnya.
Nick

Jawaban:

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.
  • Ini adalah tampilannya (melalui tangkapan layar) - jika tidak sulit untuk menafsirkan bagaimana komentar di atas akan terlihat. Klik untuk Memperbesar :

Komentar dalam editor teks

Konstantin Haase
sumber
26
Saya benar-benar lebih suka menggunakan #lebih dari mereka semua, terutama karena secara visual memisahkan garis komentar lebih baik daripada =begin/ =endatau menggunakan metode here-to. Dan, kerja bagus.
the Tin Man
38
Sangat menarik bahwa jawaban ini membuat beberapa kekurangan dalam highlighter sintaks menjadi jelas.
ZoFreX
69
Jangan lupa itu =begindan =endtidak bisa didahului oleh spasi putih apa pun.
bergie3000
15
Dan Tidak mungkin menggunakan = begin = end dalam suatu metode
Albert Català
7
Penting untuk dicatat bahwa dalam contoh kode di atas, hanya =begin...=endblok pertama dan terakhir yang digunakan #diambil oleh rdoc saat membuat dokumentasi.
the Tin Man
126
=begin
My 
multiline
comment
here
=end
Adam Lear
sumber
4
Tentu, Anda bisa melakukan ini. Berhasil. Ini sangat jarang. Saya merasa jelek. Mungkin saya terjebak dalam cara saya?
David J.
53
Saya telah menemukan bahwa jika saya memasukkan tab sebelum = mulai atau = akhir, komentar tidak berfungsi. Huruf = awal dan akhir harus ditulis pada awal setiap baris.
Rose Perrone
1
Anda tidak sendirian @ DavidJames. Saya pribadi memilih agar semuanya dikomentari oleh editor saya. CMD + / atau ALT + / adalah konvensi untuk sebagian besar.
anon58192932
1
@ DavidJames, apa yang akan Anda lakukan? Ketikkan a #dan spasi sebelum setiap baris? Banyak sekali penekanan tombol terutama jika saya mulai menambahkan jeda baris.
Paul Draper
57

Meskipun ada =begindan =end, cara yang normal dan lebih tepat untuk berkomentar adalah dengan menggunakan #di setiap baris. Jika Anda membaca sumber pustaka ruby, Anda akan melihat bahwa ini adalah cara komentar multi-baris dilakukan di hampir semua kasus.

Rein Henrichs
sumber
4
Anda mungkin mendapatkan argumen tentang bagian "lebih benar" dari pernyataan Anda karena keduanya valid. Saya lebih suka menggunakan #karena lebih jelas. Ketika mengomentari kode, penting untuk membuatnya jelas bahwa itulah yang terjadi. Jika Anda melihat kode tanpa manfaat pewarnaan kode dalam editor =begin/=enddapat membuat sulit untuk mencari tahu mengapa kode tersebut diabaikan.
the Tin Man
6
Tentu, ada banyak cara "valid" untuk menulis komentar. Mari kita bersikap praktis di sini. Jika Anda benar-benar menulis Ruby dan membaca apa yang ditulis orang lain, Anda harus menggunakan #komentar. (Saya bingung mengapa ini memiliki dua downvotes. Saya kira komunitas Stack Overflow kadang-kadang salah!)
David J.
4
3 == threemana def three; 1 + 1 + 1 end. Karena itu keduanya valid. Siapa peduli? Gunakan 3!
David J.
1
@theTinMan Sementara benar, umumnya satu-satunya waktu Anda tidak akan memiliki penyorotan sintaks (dalam pengalaman saya) adalah ketika Anda menggunakan viserver produksi. Dalam hal ini, Anda mungkin tidak seharusnya melakukan pengembangan di sana.
Parthian Shot
1
@ DavidJames Contoh Anda konyol karena itu lebih bertele-tele. Menempatkan hash di setiap baris lebih tepat untuk komentar yang lebih panjang. Dan jika ada yang mengira frasa "/ dev / urandom digunakan di sini untuk PRNG yang nonblocking yang terdengar sehat. Jangan menyentuh kode ini - ini ajaib" adalah usaha saya untuk menulis ruby, saya berpendapat kebingungan mereka lebih disebabkan oleh ketidaktahuan mereka. bagian dari kurangnya kejelasan tentang milikku. Yang tidak mengatakan poin Anda selalu tidak valid - itu hanya bagus ketika mengomentari kode. Tetapi jika komentar Anda hanya ... komentar ... itu harus jelas.
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
sumber
1
+1 karena saya tidak tahu bahwa bersarang adalah sesuatu di komentar multiline Ruby.
Parthian Shot
2
@ParthianShot - Ini bukan hal - = mulai dan = akhir diabaikan jika tidak di awal baris. Bersarang tampaknya tidak mungkin.
skagedal
Bersarang komentar di dalam komentar akan menghasilkan satu komentar atau kesalahan sintaksis untuk mencoba mengakhiri komentar di mana tidak ada komentar untuk mengakhiri. /*I am a\n#nested\ncomment, which really serves no purpose*/ /*I am bound /*to*/ FAIL!*/Masuk akal jika Anda memiliki komentar satu baris dan kode di dalam komentar multiline, seperti fungsi dengan dokumentasi yang Anda tidak ingin orang lain gunakan, tetapi Anda juga tidak ingin menghapusnya dari file.
Chinoto Vokro
17

Menggunakan salah satu dari:

= mulai
Ini
adalah
Sebuah
komentar
blok
= akhir

atau

# Ini
# adalah
# Sebuah
# komentar
# blok

adalah dua hanya saat ini didukung oleh rdoc, yang merupakan alasan bagus untuk menggunakan hanya ini saya pikir.

Manusia Timah
sumber
1
Alasan bagus lainnya untuk tetap berpegang pada =beginatau #adalah bahwa keduanya <<-DOCdan "sintaksis akan menghasilkan string literal yang tidak berguna saat eksekusi.
Cœur
13
=begin
(some code here)
=end

dan

# This code
# on multiple lines
# is commented out

keduanya benar. Keuntungan dari jenis komentar pertama adalah dapat diedit - lebih mudah untuk menghilangkan komentar karena lebih sedikit karakter yang dihapus. Keuntungan dari jenis komentar kedua adalah keterbacaan — membaca kode baris demi baris, lebih mudah untuk mengatakan bahwa baris tertentu telah dikomentari. Telepon Anda tetapi pikirkan tentang siapa yang mengejar Anda dan betapa mudahnya bagi mereka untuk membaca dan memelihara.

La-comadreja
sumber
IMO, =begindan =endjangan menyampaikan secara visual bahwa apa yang ada di antara adalah komentar ... Clojure, misalnya, menggunakan (comment :whatever)yang di lead mengatakan apa artinya: stackoverflow.com/questions/1191628/block-comments-in-clojure
David J.
1
Juga tidak melakukan "/ *" dan "* /" di Java, C dan C ++. Seperti halnya sintaksis Ruby, blok kode yang besar mungkin dikomentari di antara kedua karakter tersebut, dan semua orang yang mengetahui dasar-dasar bahasa tersebut tahu apa artinya.
La-comadreja
1
Pewarnaan sintaks (dalam vim, misalnya) menunjukkan bahwa tipe pertama adalah komentar. Dalam hal ini, tipe pertama tidak memiliki kerugian.
Camille Goudeseune
12

Berikut ini sebuah contoh:

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

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

=end

Segala sesuatu yang Anda tempatkan di antara =begindan =endakan diperlakukan sebagai komentar terlepas dari berapa banyak baris kode di dalamnya.

Catatan: Pastikan tidak ada ruang antara =dan begin:

  • Benar: =begin
  • Salah: = begin
Prabhakar Undurthi
sumber
5

=begin comment line 1 comment line 2 =end pastikan = mulai dan = akhir adalah hal pertama di baris itu (tanpa spasi)

anandharshan
sumber
2

Jika seseorang mencari cara untuk mengomentari banyak baris dalam templat html di Ruby on Rails, mungkin ada masalah dengan = begin = end, misalnya:

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

akan gagal karena%> menutup image_tag.

Dalam hal ini, mungkin dapat diperdebatkan apakah ini mengomentari atau tidak, tapi saya lebih suka melampirkan bagian yang tidak diinginkan dengan blok "jika salah":

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

Ini akan bekerja

pengguna2553863
sumber
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

Perhatikan bahwa pada saat posting, mesin stackoverflow tidak membuat pewarnaan sintaks dengan benar. Menguji bagaimana hal itu ditampilkan di editor pilihan Anda dibiarkan sebagai latihan. ;)

psychoslave
sumber