Simple Emptiness
Дима • 31 марта 2007 г.
На днях мне пришла в голову идея которая показалась мне интересной.
Для строк:
"" | "default" # "default"
" \n" | "default" # "default"
" blah " | "default" # " blah "
Для хешей:
{} | {:default => :value} # {:default => :value}
Для других объектов:
false | "something" # "something"
nil | "something" # "something"
true | false # true
{:pi => 3.1416} | {:pi => 3.14159265} # {:pi => 3.1416}
Для массивов работать не будет, у них уже есть метод |, который объединяет два массива удаляя дубликаты.
Также, ещё один недостаток это то, что данный способ не предполагает lazy evaluation, то есть следующий код вызовет и some_method() и redundant_method() при любом условии:
value = some_method() | redundant_method()
А вообще, всё это было сделано для того, чтобы сократить количество строк при следующем действии:
@plan = params[:plan_name].to_s.strip.empty? ? "Not given." : params[:plan_name]
До:
@plan = params[:plan_name] | "Not given."
Ну а потенциально может пригодиться и в множестве других случаев.
Скачать файл с кодом можно здесь: simple_emptiness.rb
У кого есть предложения по поводу того как это можно ещё использовать или улучшить?
Update: по поводу замечания насчет возможного использования метода blank? (из ActiveSupport) вместо цепочки to_s.strip отмечу, что код писался с расчетом на возможное использование и в pure ruby проектах, поэтому решено было зависимости сократить по минимуму.
8 комментариев:
Извините, но комментарии для этой статьи уже закрыты.

def some_method true end def redundant_method false end puts some_method() || redundant_method()
А, пардон, перечитал, не о том, видимо. :)
Простите, а Object#blank? для кого сотворили?
Да я в курсе про blank?-то. Просто опять же,
something.blank? ? something : “default”
и
something | “default”
выглядят немного иначе. Плюс мне нравится ассоциация с рубишным ||. Я предложил syntax sugar, nothing more.
Так я не против, только зачем все остальное кроме Object если есть blank?
class Object end
и дело к стороне
Понравилось :)
:))
Ай какая полезная штука :) Шпашыба