Enumerable#findを使う
before
def find_something
ret = nil
Foo.each do |item|
if item.this_is_it?
ret = item
break
end
end
ret
end
after
def find_something
Foo.find{|item| item.this_is_it?}
end
Orを活用する
before
def find_or_create info
ret = find_something(info.id)
ret = create_something(info) if ret.nil?
ret
end
after
def find_or_create info
find_something(info.id) || create_something(info)
end
文字列結合をmap+joinで
before
str = ""
Items.each do |item|
str += "#{item.key}='#{item.val}'"
end
after
str = Items.map do |item|
"#{item.key}='#{item.val}'"
end.join
メソッド呼ぶだけのイテレーションは&で
before
%w(1 0 2 5 0 2).map{|v| v.to_i}.select{|v| v>0}
after
%w(1 0 2 5 0 2).map(&:to_i).select(&:nonzero?)
nonzeroと「0より大きい」は等価でないけど。
配列から除外はrejectでも可
before
%w(1 0 2 5 0 2).map(&:to_i).select(&:nonzero?)
after
%w(1 0 2 5 0 2).map(&:to_i).reject(&:zero?)