Ruby'deki soru işareti operatörünün amacı nedir?
Bazen şöyle görünür:
assert !product.valid?
bazen bir if
yapıdadır.
Ruby'deki soru işareti operatörünün amacı nedir?
Bazen şöyle görünür:
assert !product.valid?
bazen bir if
yapıdadır.
Yanıtlar:
Bir kod stili kuralıdır; bir yöntemin bir boole değeri döndürdüğünü gösterir.
Soru işareti, bir yöntem adının sonundaki geçerli bir karakterdir.
?
, Ruby'nin (bir karakteri ASCII tamsayısına dönüştüren test
, RegEx'lerde kullanım , vb.) Birçok başka kullanımı vardır , bunların çoğu burada diğer cevaplarda yer almaktadır.
isEmpty()
, isDigit()
vb olarak Yakut, aynı yöntemler yazılı olacaktır empty?
ve digit?
biraz daha güzel IMO olan.
is
her zaman kullanıyorum. Bu süper soru işareti beri Swift gelen birisi için kafa karıştırıcı olabilir orada kullanılır nullable
:)
Ayrıca ?
bir karakterle birlikte, ASCII karakter kodunu döndüreceğini unutmayın .A
Örneğin:
?F # => will return 70
Alternatif olarak yakut 1.8'de şunları yapabilirsiniz:
"F"[0]
veya yakut 1.9'da:
"F".ord
Ayrıca ?F
, dizeyi döndüreceğine dikkat edin "F"
, bu nedenle kodu kısaltmak ?F.ord
için, aynı sonucu elde etmek için Ruby 1.9'da da kullanabilirsiniz "F".ord
.
'F'
Örneğinizde, yöntem adının sadece bir parçasıdır. Ruby'de yöntem adlarında ünlem işaretleri de kullanabilirsiniz!
Ruby'deki soru işaretlerinin bir başka örneği üçlü operatör olabilir.
customerName == "Fred" ? "Hello Fred" : "Who are you?"
Örneğinizde
product.valid?
Aslında bir işlev çağrısı ve adlı bir işlevi çağırır valid?
. Belirli "koşul testi" / boole işlevlerinin geleneksel olarak işlev adının bir parçası olarak soru işareti vardır.
?
Değişkenlere değil, yalnızca yöntem adlarında izin verildiğine dikkat çekmek gerekebilir . Ruby öğrenme sürecinde, ?
bir boole dönüş türü belirlediğini varsaydım, bu yüzden onları bayrak değişkenlerine eklemeye çalıştım ve hatalara yol açtım. Bu bana bir süreliğine yanlışlıkla ?
s'yi içeren bazı özel sözdizimi olduğuna inanmamı sağladı .
İlgili: Yöntem adı olabilirken neden bir değişken ismi `? 'İle bitemez?
Bence bu sadece boolean şeyler için bir kongre. Biraz " IsValid
" demek gibi .
Ayrıca "önceki karakterin en fazla bir tekrarı" anlamına gelen normal ifadelerde de kullanılır
örneğin, normal ifade /hey?/
" he
" ve " hey
" dizeleriyle eşleşir .
Ayrıca , Çekirdek # testindeki test yönteminin ilk argümanıyla birlikte kullanılan yaygın bir kuraldır.
irb(main):001:0> test ?d, "/dev" # directory exists?
=> true
irb(main):002:0> test ?-, "/etc/hosts", "/etc/hosts" # are the files identical
=> true
burada bu soruda görüldüğü gibi
test
, ?d
kısayoludur "d"
. test
ilk argüman olarak tek karakterlik bir dize alır, böylece test ?d, "/dev"
veya ile çağırabilirsiniz test "d", "/dev"
.