Kendimi tekrar tekrar Ruby on Rails'de nil?",
blank?" ve `empty?" arasındaki farkların net bir tanımını ararken buluyorum. İşte geldiğim en yakın nokta:
blank?nesneleri yanlış, boş veya bir boşluk dizesidir. Örneğin,
"",
" ",
nil,
[]ve
{}` boştur.
nil?
nesneleri NilClass'ın örnekleridir.
empty?
nesneleri sınıfa özgüdür ve tanımları sınıftan sınıfa değişir. Bir karakter dizisi hiç karakter içermiyorsa boştur ve bir dizi hiç öğe içermiyorsa boştur.
Eksik bir şey ya da yapılabilecek daha sıkı bir karşılaştırma var mı?
.nil?` herhangi bir nesne üzerinde kullanılabilir ve nesne nil ise true değerini alır.
.empty?` stringler, diziler ve hashler üzerinde kullanılabilir ve true değerini döndürür:
nil olan bir şey üzerinde .empty?
çalıştırmak NoMethodError
hatası verir.
İşte burada .blank?
devreye girer. Rails tarafından uygulanmıştır]1 ve herhangi bir nesne üzerinde çalışabileceği gibi stringler, diziler ve hashler üzerinde de .empty?
gibi çalışabilir.
nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false
.blank?` ayrıca boş olmayan ancak yalnızca boşluk içeren dizelerde true olarak değerlendirilir:
" ".blank? == true
" ".empty? == false
Rails ayrıca .blank?
ifadesinin olumsuzunu döndüren .present?
ifadesini de sağlar.
Dizi hatası: blank?
, bir dizinin tüm elemanları boş olsa bile false
döndürür. Bu durumda boşluğu belirlemek için, örneğin blank?
ile all?
kullanın:
[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true
Bir fark, .nil?
ve .empty?
programlama dili Ruby tarafından sağlanan yöntemler iken, .blank?
web geliştirme çerçevesi Rails tarafından eklenen bir şeydir.
Genellikle !empty?
olan any?
yi unutmayın. Rails'de genellikle bir ifadenin sonunda if something
veya unless something
ile bir şeyin varlığını kontrol ederim, ardından her yerde işe yarıyor gibi göründüğü için gerektiğinde blank?
kullanırım.