Різниця між blank?, present?, empty? та nil? у Ruby

Обкладинка допису: Різниця між blank?, present?, empty? та nil? у Ruby
ЗмістНатисність на посилання, щоб перейти до потрібного місця
У Ruby та Rails часто можна побачити методи blank?, present?, empty? і nil?. Вони здаються схожими, але насправді мають різні джерела і поведінку. Розберімося, коли який метод варто використовувати.

nil? - базовий метод Ruby

Метод nil? є частиною Ruby. Він повертає true, якщо об’єкт - це саме nil.
nil.nil?      # => true
"".nil?       # => false
[].nil?       # => false
0.nil?        # => false
Використовується для перевірки, чи взагалі є об’єкт.

empty? — для колекцій та рядків

Метод empty? визначений у класах String, Array, Hash, Set та деяких інших. Він перевіряє, чи колекція або рядок порожні, тобто не містять елементів або символів.
"".empty?     # => true
[].empty?     # => true
{}.empty?     # => true
nil.empty?    # => NoMethodError
Якщо об’єкт не підтримує empty?, отримаєте помилку. Тому цей метод варто використовувати лише тоді, коли ви точно знаєте тип змінної.

blank? - з ActiveSupport (Rails)

Метод blank? з’являється завдяки бібліотеці ActiveSupport, яка йде разом із Rails. Він є більш "розумною" версією empty?, тому що враховує і nil, і пробіли, і порожні колекції.
nil.blank?       # => true
"".blank?        # => true
"   ".blank?     # => true
[].blank?        # => true
{}.blank?        # => true
false.blank?     # => true
0.blank?         # => false
blank? зручно використовувати в Rails-коді, коли потрібно перевірити “порожнечу” будь-якого об’єкта без винятків.

present? - з ActiveSupport (Rails)

Метод present? - це просто протилежність blank?. Він повертає true, якщо об’єкт не порожній.
"Ruby".present?   # => true
"".present?       # => false
nil.present?      # => false
[1, 2].present?   # => true
Використовується для умов:
puts "Hello!" if name.present?
Коротко:
  • nil? - стандартний Ruby, перевіряє лише nil.
  • empty? - стандартний Ruby, для колекцій та рядків тощо.
  • blank? - з ActiveSupport, враховує і nil, і пробіли, і пусті колекції.
  • present? - з ActiveSupport, протилежний до blank?.
Коли що використовувати
  • Якщо пишете чистий Ruby без Rails - використовуйте nil? і empty?.
  • Якщо у вас Rails або ActiveSupport - частіше зручно blank? / present?, бо вони охоплюють усі випадки та не викликають помилки на nil.

Цей допис поки що не має жодних доповнень від автора/ки.

Include, Extend, Prepend у Ruby: як вони працюють і в чому різниця
29 жовт., 21:20

Include, Extend, Prepend у Ruby: як вони працюють і в чому різниця

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
module_function у Ruby: коли методи модуля доступні як модульні та як функції
29 жовт., 21:53

module_function у Ruby: коли методи модуля доступні як модульні та як функції

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке memoization в Ruby?
30 жовт., 10:17

Що таке memoization в Ruby?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
is_a?, kind_of?, instance_of? — як Ruby перевіряє тип об’єкта?
30 жовт., 19:55

is_a?, kind_of?, instance_of? — як Ruby перевіряє тип об’єкта?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
&& vs and — різниця в Ruby, яка може зламати ваш код
30 жовт., 20:23

&& vs and — різниця в Ruby, яка може зламати ваш код

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Змінні у Ruby: @, @@ та class instance variable
30 жовт., 20:54

Змінні у Ruby: @, @@ та class instance variable

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska