Tanda tanya di akhir fungsi bukan operator, ini karakter biasa. Tanda tanya bersama dengan titik dua adalah operator kondisional ternary. Tanda tanya dengan sendirinya adalah operator kutipan unary. Lihat stackoverflow.com/questions/16641205/…
Old Pro
Jawaban:
296
Ini adalah konvensi gaya kode; itu menunjukkan bahwa suatu metode mengembalikan nilai boolean.
Tanda tanya adalah karakter yang valid di akhir nama metode.
Terima kasih, tetapi apakah konvensi ini berarti hanya logika atau mungkinkah ada efek samping? Lucu bagaimana ini semacam peretasan di sekitar bahasa yang diketik dengan jenis pengembalian dalam kode.
Jason
5
Jika hal ini benar-benar metode konvensi penamaan. Tidak ada penegakan nilai pengembalian boolean. Hanya karena nama metode diakhiri dengan tanda tanya tidak berarti bahwa metode tersebut harus mengembalikan boolean ... tetapi yang paling pasti harus mengembalikan boolean. Namun ada beberapa kegunaan lain ?di Ruby (adalah operator ternary, mengubah karakter menjadi integer ASCII-nya, penggunaan dalam test, di RegEx'es, dll.) Yang banyak di antaranya tercakup dalam jawaban lain di sini.
Karl Wilbur
4
@Jason FYI, bahkan bahasa yang sangat diketik memiliki konvensi seperti ini. Misalnya, di Jawa metode yang mengembalikan nilai boolean sering diawali dengan "adalah", seperti dalam isEmpty(), isDigit(), dll Ruby, metode yang sama akan ditulis empty?, dan digit?yang sedikit lebih bagus IMO.
Ajedi32
3
Ajedi32 - Ya saya setuju itu bagus untuk nama fungsi seperti itu, saya gunakan issepanjang waktu. Ini mungkin yang super membingungkan bagi seseorang yang berasal dari Swift sejak tanda tanya ada digunakan untuk nullable:)
Jason
83
Juga perhatikan ?bersama dengan karakter, akan mengembalikan kode karakter ASCII untukA
Sebagai contoh:
?F # => will return 70
Bergantian di ruby 1.8 Anda dapat melakukan:
"F"[0]
atau di ruby 1.9:
"F".ord
Perhatikan juga bahwa ?Fakan mengembalikan string "F", jadi untuk membuat kode lebih pendek, Anda juga dapat menggunakan ?F.orddi Ruby 1.9 untuk mendapatkan hasil yang sama "F".ord.
Untuk memperluas jawaban Andy, Anda juga akan melihat hal-hal seperti: customerName == user.logged_in? ? user.name: "Siapa kamu?" Perhatikan tanda tanya ganda
Tanya
16
Dalam contoh Anda
product.valid?
Sebenarnya adalah panggilan fungsi dan memanggil fungsi bernama valid?. Beberapa tipe "test for condition" / fungsi boolean tertentu memiliki tanda tanya sebagai bagian dari nama fungsi berdasarkan konvensi.
Mungkin perlu menunjukkan bahwa ?s hanya diperbolehkan dalam nama metode, bukan variabel. Dalam proses belajar Ruby, saya berasumsi bahwa ?ditunjuk tipe boolean return jadi saya mencoba menambahkannya ke variabel flag, yang mengarah ke kesalahan. Ini membuat saya salah percaya untuk sementara waktu bahwa ada beberapa sintaks khusus yang melibatkan ?s.
Ini tidak terkait dengan test, ?dadalah jalan pintas untuk "d". testmengambil string satu karakter sebagai argumen pertama, jadi Anda bisa menyebutnya dengan test ?d, "/dev"atau test "d", "/dev".
Jawaban:
Ini adalah konvensi gaya kode; itu menunjukkan bahwa suatu metode mengembalikan nilai boolean.
Tanda tanya adalah karakter yang valid di akhir nama metode.
sumber
?
di Ruby (adalah operator ternary, mengubah karakter menjadi integer ASCII-nya, penggunaan dalamtest
, di RegEx'es, dll.) Yang banyak di antaranya tercakup dalam jawaban lain di sini.isEmpty()
,isDigit()
, dll Ruby, metode yang sama akan ditulisempty?
, dandigit?
yang sedikit lebih bagus IMO.is
sepanjang waktu. Ini mungkin yang super membingungkan bagi seseorang yang berasal dari Swift sejak tanda tanya ada digunakan untuknullable
:)Juga perhatikan
?
bersama dengan karakter, akan mengembalikan kode karakter ASCII untukA
Sebagai contoh:
Bergantian di ruby 1.8 Anda dapat melakukan:
atau di ruby 1.9:
Perhatikan juga bahwa
?F
akan mengembalikan string"F"
, jadi untuk membuat kode lebih pendek, Anda juga dapat menggunakan?F.ord
di Ruby 1.9 untuk mendapatkan hasil yang sama"F".ord
.sumber
'F'
Ini adalah konvensi di Ruby bahwa metode yang mengembalikan nilai boolean diakhiri dengan tanda tanya. Tidak ada yang lebih penting dari itu.
sumber
Dalam contoh Anda itu hanya bagian dari nama metode. Di Ruby Anda juga dapat menggunakan tanda seru dalam nama metode!
Contoh lain dari tanda tanya di Ruby adalah operator ternary.
sumber
Dalam contoh Anda
Sebenarnya adalah panggilan fungsi dan memanggil fungsi bernama
valid?
. Beberapa tipe "test for condition" / fungsi boolean tertentu memiliki tanda tanya sebagai bagian dari nama fungsi berdasarkan konvensi.sumber
Mungkin perlu menunjukkan bahwa
?
s hanya diperbolehkan dalam nama metode, bukan variabel. Dalam proses belajar Ruby, saya berasumsi bahwa?
ditunjuk tipe boolean return jadi saya mencoba menambahkannya ke variabel flag, yang mengarah ke kesalahan. Ini membuat saya salah percaya untuk sementara waktu bahwa ada beberapa sintaks khusus yang melibatkan?
s.Relevan: Mengapa nama variabel tidak bisa diakhiri dengan `?` Sementara nama metode bisa?
sumber
Saya percaya itu hanya konvensi untuk hal-hal yang boolean. Agak suka mengatakan "
IsValid
".sumber
Ini juga digunakan dalam ekspresi reguler, yang berarti "paling banyak satu pengulangan dari karakter sebelumnya"
misalnya ekspresi reguler
/hey?/
cocok dengan string "he
" dan "hey
".sumber
Ini juga merupakan konvensi umum untuk digunakan dengan argumen pertama dari metode pengujian dari uji Kernel #
seperti yang terlihat dalam pertanyaan ini di sini
sumber
test
,?d
adalah jalan pintas untuk"d"
.test
mengambil string satu karakter sebagai argumen pertama, jadi Anda bisa menyebutnya dengantest ?d, "/dev"
atautest "d", "/dev"
.