Penjelasan ringkas dari nihil v. kosong v. kosong di Ruby on Rails

Saya menemukan diri saya berulang kali mencari definisi yang jelas tentang perbedaan dari nihil?, kosong?, dan kosong? di Ruby on Rails. Berikut ini's terdekat saya've datang:

  • kosong? benda-benda palsu, kosong, atau spasi string. Misalnya, ",", ", ", nihil, [], dan {} yang kosong.

  • nihil? benda adalah contoh dari NilClass.

  • kosong? benda-kelas tertentu, dan definisi yang bervariasi dari kelas ke kelas. String kosong jika tidak memiliki karakter, dan sebuah array kosong jika tidak berisi barang-barang.

Apakah ada sesuatu yang hilang, atau yang lebih ketat dibandingkan yang dapat dibuat?

Mengomentari pertanyaan (4)
Larutan

.nihil? dapat digunakan pada setiap objek dan benar jika objek adalah nihil.

.kosong? dapat digunakan pada string, array dan hash dan mengembalikan true jika:

  • Tali panjang == 0
  • Array length == 0
  • Hash length == 0

Berjalan .kosong? pada sesuatu yang nihil akan membuang NoMethodError.

Itu adalah di mana .kosong? datang. Itu adalah yang dilaksanakan oleh Rel dan akan beroperasi pada setiap objek serta bekerja sama .kosong? pada string, array dan hash.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.kosong? juga mengevaluasi benar pada string yang non-kosong tapi hanya berisi spasi:

"  ".blank? == true
"  ".empty? == false

Rel juga menyediakan .hadir?, yang mengembalikan negasi .kosong?.

Array gotcha: kosong? akan menghasilkan false bahkan jika semua unsur-unsur ** array yang kosong. Untuk menentukan kekosongan dalam kasus ini, gunakan semua? dengan kosong?, misalnya:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 
Komentar (12)

Saya membuat ini berguna meja dengan semua kasus-kasus:

kosong?, sekarang? yang disediakan oleh Rel.

Komentar (3)

Hanya memperpanjang Julian's tabel:

Ref: kosong?kosong?nihil?傻傻分不清楚

Komentar (6)

Tip cepat: !obj.kosong? == obj.hadir?

Dapat berguna/mudah pada mata dalam beberapa ekspresi

Komentar (6)

Salah satu perbedaan adalah bahwa .nihil? dan .kosong? adalah metode yang disediakan oleh bahasa pemrograman Ruby, sedangkan .kosong? adalah sesuatu yang ditambahkan oleh web development framework Rails.

Komentar (0)

  • Segala sesuatu yang nihil? adalah kosong?
  • Segala sesuatu yang kosong? adalah kosong?
  • Tidak ada yang kosong? adalah nihil?
  • Tidak ada yang nihil? adalah kosong?

tl;dr -- hanya menggunakan kosong? & hadir? kecuali jika anda ingin membedakan antara "," dan ", "

Komentar (1)

Kasus khusus adalah ketika mencoba untuk menilai apakah suatu nilai boolean adalah nihil:

false.present? == false
false.blank? == true
false.nil? == false

Dalam hal ini rekomendasi akan menggunakan .nihil?

Komentar (0)

Hanya sebuah catatan kecil tentang apa? rekomendasi: Ia's benar bahwa itu's umumnya setara dengan !kosong?. Namun, apa? akan kembali benar untuk string hanya spasi (ala ", ").

Dan tentu saja, melihat 1.9 komentar di atas, juga.

Komentar (1)

Don't lupa apa? yang umumnya !kosong?. Dalam Rails saya biasanya memeriksa keberadaan sesuatu di akhir pernyataan dengan jika sesuatu atau kecuali sesuatu kemudian menggunakan kosong? di mana diperlukan karena tampaknya untuk bekerja di mana-mana.

Komentar (2)

nihil? adalah standar Ruby metode yang dapat disebut pada semua benda dan mengembalikan true jika objek nihil:

b = nil
b.nil? # => true

kosong? adalah standar Ruby metode yang dapat disebut pada beberapa benda seperti String, Array dan Hash dan mengembalikan true jika benda tersebut tidak mengandung unsur:

a = []
a.empty? # => true

b = ["2","4"]
b.empty? # => false

kosong? tidak disebut di nihil benda-benda.

kosong? adalah Rel metode yang dapat disebut pada nihil benda-benda serta benda kosong.

Komentar (0)

Orang lain telah menjelaskan dengan baik apa perbedaan.

Saya ingin menambahkan di Ruby On Rails, lebih baik menggunakan obj.kosong? atau obj.hadir? bukan obj.nihil? atau obj.kosong?.

obj.kosong? menangani semua jenis nihil, '', [], {}, dan mengembalikan true jika nilai-nilai yang tidak tersedia dan kembali palsu jika nilai-nilai yang tersedia pada setiap jenis objek.

Komentar (0)

ada? metode yang dapat digunakan untuk memeriksa apakah data yang ada di database atau tidak. Ia mengembalikan nilai boolean yang baik true atau false.

Komentar (1)

Rel 4

alternatif untuk @corban-brook 's 'Array gotcha: kosong?' untuk memeriksa apakah suatu array hanya memegang nilai-nilai kosong dan dapat dianggap sebagai kosong? benar:

[ nil, '' ].all? &:blank? == true

satu juga bisa dilakukan:

[nil, '', "", " ",'  '].reject(&:blank?).blank? == true
Komentar (0)

nihil? dapat digunakan pada setiap objek. Hal ini menentukan jika objek memiliki nilai apapun atau tidak, termasuk 'kosong' nilai-nilai.

Misalnya:

example = nil
example.nil?  # true

"".nil?  # false

Pada dasarnya nihil? hanya akan mengembalikan true jika objek ini sebenarnya sama dengan 'nil'.

kosong? hanya disebut pada benda-benda yang dianggap sebagai koleksi. Ini termasuk hal-hal seperti string (kumpulan karakter), hash (satu koleksi dari pasangan kunci/nilai) dan array (kumpulan dari objek sewenang-wenang). kosong? kembali benar adalah tidak ada item dalam koleksi.

Misalnya:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # false

nil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

Perhatikan bahwa kosong? dapat't akan dipanggil nil benda-benda sebagai nihil benda-benda yang tidak koleksi dan itu akan menaikkan pengecualian.

Juga perhatikan bahwa bahkan jika item dalam koleksi yang kosong, itu tidak berarti kumpulan kosong.

kosong? pada dasarnya adalah kombinasi dari nihil? dan kosong? It's berguna untuk memeriksa benda-benda yang anda anggap adalah koleksi, tapi juga bisa menjadi nihil.

Komentar (0)