Ruby'de bazen "?" ve "!" bunların sonunda, örneğin:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Amaçlarının ne olduğunu merak ediyordum. Onlar sadece sözdizimi şeker kaplaması mı?
Ruby'de bazen "?" ve "!" bunların sonunda, örneğin:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
Amaçlarının ne olduğunu merak ediyordum. Onlar sadece sözdizimi şeker kaplaması mı?
Yanıtlar:
Okunabilirlik için "sadece şeker kaplama", ancak ortak anlamları var:
!
bazı kalıcı veya potansiyel olarak tehlikeli değişiklikler gerçekleştirir ; Örneğin:
Enumerable#sort
Enumerable#sort!
yerinde sıralarken nesnenin sıralanmış bir sürümünü döndürür .ActiveRecord::Base#save
kaydetme başarısız olursa false döndürür ActiveRecord::Base#save!
.Kernel::exit
bir komut dosyasının çıkmasına neden olurken Kernel::exit!
, bunu hemen yapar, herhangi bir çıkış işleyicisini atlar.?
, kodun bir cümle gibi daha sezgisel olarak akmasını sağlayan bir boolean ile biter - if number.zero?
"sayı sıfırsa" gibi okunur, ancak if number.zero
tuhaf görünür.Örnekte, name.reverse
Bir ters dizeye değerlendirir, ancak sonrasında name.reverse!
hat yapar name
değişken aslında ihtiva ters isim. name.is_binary_data?
" name
ikili veri mi?" gibi görünüyor .
Array#clear
Örneğin bkz . Diziyi temizler. Diziyi temizlemek doğal olarak onu değiştirir. Bunda şaşırtıcı bir şey yok, isim zaten bunu açıkça gösteriyor, bu nedenle: patlama yok. Ruby-forum.com/topic/176830#773946 adresine bakın .
Soru işareti, yöntemin boole değerini döndürdüğünü gösterir. Zaten burada cevaplandı:
Ruby'de soru işareti operatörü ne anlama geliyor?
Patlama, yöntemin nesnenin kendisine etki ettiğini gösterir. Zaten burada cevaplandı:
Ruby'de ?
bu, yöntemin bir boole döndüreceği ve !
çağrıldığı nesneyi değiştireceği anlamına gelir . Koda bakarken okunabilirliği artırmak için oradalar.
- Sanırım - programlama dillerinin çoğunun aksine ...
Ruby, yöntemlerin soru işaretleri veya ünlem işaretleriyle bitmesine izin verilir.
Geleneksel olarak, soruları yanıtlayan yöntemler (yani, Array # boş? Alıcı boşsa true döndürür) soru işaretleriyle son bulur.
Olası "tehlikeli" yöntemler (yani kendini veya argümanları değiştiren yöntemler, çıkış! Vb.), Ünlem işaretleriyle sona eren kurallardır.
From: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/ , Bölüm Komik yöntem adları
?
yüklem yöntemleri denir.
Dikkat edin, bu her zaman böyle değildir. Örneğin Ruby Array # concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concat .
Kötü bir şekilde yanabileceğiniz bir şey gibi MyActiveRecordModel.column_names.concat([url])
. MyActiveRecordModel ile ilgili sonraki çağrılar MyActiveRecordModel için bir 'url' sütunu aramaya ve atmaya çalışacaktır.
Bunun yerine, concat'i yapmadan önce onu klonlamanız gerekir. Neyse ki benim test süitim bunu yakaladı, ama .. dikkat!