проверка - Краткое пояснение nil v. Empty v. Blank в Ruby on Rails




ruby проверка на nil (10)

Я нахожусь в поиске ясного определения различий nil? , blank? , и empty? в Ruby on Rails. Вот ближайший я пришел:

  • blank? объекты являются ложными, пустыми или пробельными строками. Например, "" , " " , nil , [] и {} пусты.

  • nil? объектами являются экземпляры NilClass.

  • empty? объекты относятся к классу, и определение варьируется от класса к классу. Строка пуста, если она не имеет символов, а массив пуст, если не содержит элементов.

Есть ли что-то недостающее или более точное сравнение, которое можно сделать?


Быстрый совет !obj.blank? == obj.present? !obj.blank? == obj.present?

Может быть удобнее / проще на глазах в некоторых выражениях


Все остальные хорошо объяснили, в чем разница.

Я хотел бы добавить Ruby On Rails, лучше использовать obj.blank? или obj.present? вместо obj.nil? или obj.empty? ,

obj.blank? обрабатывает все типы nil , '' , [] , {} и возвращает true если значения недоступны и возвращает false если значения доступны для любого типа объекта.


Одно отличие в том, что .nil? и .empty? являются методы, предоставляемые языком программирования Ruby, тогда как .blank? это что-то added рамкой веб-разработки Rails.


Особым случаем является попытка оценить, имеет ли значение boolean значение nil:

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

В этом случае рекомендация будет заключаться в использовании .nil?



Рельсы 4

альтернатива @ corban-brook's 'Array gotcha: blank?' для проверки, содержит ли массивы только пустые значения и может считаться пустой? правда:

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

можно также сделать:

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

  • Все, что nil? blank?
  • Все, что empty? blank?
  • Ничего empty? nil?
  • Ничего, что nil? empty?

tl; dr - использовать только blank? и present? если вы не хотите различать "" и " "


.nil? может использоваться для любого объекта и является истинным, если объект равен нулю.

.empty? может использоваться для строк, массивов и хешей и возвращает true, если:

  • Длина строки == 0
  • Длина массива == 0
  • Длина хеширования == 0

Бежать .empty? на что-то, что NoMethodError будет бросать NoMethodError .

Это где .blank? входит. Он реализован Rails и будет работать на любом объекте, а также работать как .empty? на строках, массивах и хешах.

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

.blank? также оценивает значение true для строк, которые не являются пустыми, но содержат только пробелы:

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

Rails также предоставляет .present? , который возвращает отрицание .blank? ,

Массив: нет blank? вернет false даже если все элементы массива пустые. Чтобы определить пустоту в этом случае, используйте all? с blank? , например:

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

nil? может использоваться на любом объекте. Он определяет, имеет ли объект какое-либо значение или нет, включая «пустые» значения.

Например:

example = nil
example.nil?  # true

"".nil?  # false

В основном nil? будет когда-либо возвращать true, если объект фактически равен «nil».

empty? вызывается только объектами, которые считаются коллекцией. Сюда входят такие вещи, как строки (набор символов), хеши (набор пар ключ / значение) и массивы (совокупность произвольных объектов). empty? возвращает true, нет элементов в коллекции.

Например:

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

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

Заметьте, что empty? не может быть вызван нильскими объектами, поскольку нильские объекты не являются коллекцией и будут вызывать исключение.

Также обратите внимание, что даже если элементы в коллекции пустые, это не значит, что коллекция пуста.

blank? это в основном комбинация nil? и empty? Это полезно для проверки объектов, которые вы считаете коллекциями, но также может быть nil.


nil? является стандартным методом Ruby, который можно вызвать для всех объектов и возвращает true если объект равен nil :

b = nil
b.nil? # => true

empty? является стандартным методом Ruby, который можно вызвать для некоторых объектов, таких как строки, массивы и хеши, и возвращает true если эти объекты не содержат элемента:

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

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

empty? не может быть вызван nil объектами.

blank? это метод Rails, который может быть вызван как для объектов nil так и для пустых объектов.





ruby