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=beginEvery body mentioned this way
to have multiline comments.The=beginand=end must be at the beginning of the line or
it will be a syntax error.=end
puts "Hello world!"<<-DOCAlso, 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 :
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.
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.
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=beginBetween=beginand=end, any number
of lines may be written.All of these
lines are ignored by the Ruby interpreter.=end
puts "Hello world!"
+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.
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.
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:
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":
<%iffalse%>... multiple HTML lines to comment out
<%= image_tag("image.jpg")%><%end%>
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. ;)
.pp
menyukai komentar multiline dalam manifestasi Wayang (yang didasarkan pada sintaksis mirip-Ruby), Anda dapat menggunakan komentar blokir gaya-c/**/
Jawaban:
sumber
#
lebih dari mereka semua, terutama karena secara visual memisahkan garis komentar lebih baik daripada=begin
/=end
atau menggunakan metode here-to. Dan, kerja bagus.=begin
dan=end
tidak bisa didahului oleh spasi putih apa pun.=begin...=end
blok pertama dan terakhir yang digunakan#
diambil oleh rdoc saat membuat dokumentasi.sumber
#
dan spasi sebelum setiap baris? Banyak sekali penekanan tombol terutama jika saya mulai menambahkan jeda baris.Meskipun ada
=begin
dan=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.sumber
#
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/=end
dapat membuat sulit untuk mencari tahu mengapa kode tersebut diabaikan.#
komentar. (Saya bingung mengapa ini memiliki dua downvotes. Saya kira komunitas Stack Overflow kadang-kadang salah!)3 == three
manadef three; 1 + 1 + 1 end
. Karena itu keduanya valid. Siapa peduli? Gunakan3
!vi
server produksi. Dalam hal ini, Anda mungkin tidak seharusnya melakukan pengembangan di sana.sumber
/*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.Menggunakan salah satu dari:
atau
adalah dua hanya saat ini didukung oleh rdoc, yang merupakan alasan bagus untuk menggunakan hanya ini saya pikir.
sumber
=begin
atau#
adalah bahwa keduanya<<-DOC
dan"
sintaksis akan menghasilkan string literal yang tidak berguna saat eksekusi.dan
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.
sumber
=begin
dan=end
jangan 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-clojureBerikut ini sebuah contoh:
Segala sesuatu yang Anda tempatkan di antara
=begin
dan=end
akan diperlakukan sebagai komentar terlepas dari berapa banyak baris kode di dalamnya.Catatan: Pastikan tidak ada ruang antara
=
danbegin
:=begin
= begin
sumber
=begin comment line 1 comment line 2 =end
pastikan = mulai dan = akhir adalah hal pertama di baris itu (tanpa spasi)sumber
Jika seseorang mencari cara untuk mengomentari banyak baris dalam templat html di Ruby on Rails, mungkin ada masalah dengan = begin = end, misalnya:
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":
Ini akan bekerja
sumber
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. ;)
sumber