はじめに
仕事で大規模なruby on rails製のソフトウェアの開発・保守をやっております。今日もじっくりいきもののような巨大なソースとにらめっこしていたところ、気になる使い方をしていました。
後置unlessと見せかけて条件式が改行されている
hoge(param) unless str == foo return
環境
MacBook-Air:ruby take$ ruby -v ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]
普通の使い方
if同様、条件式があとに来るほうがポピュラーかと思います。
foo = 0 bar = 1 unless foo == bar puts 'unless' else puts 'else' end
unless
後置unless
これも後置if同様、以下のように書けば行数を減らせるかと思います。
foo = 0 bar = 1 puts 'unless' unless foo == bar
unless
ちなみに、後置if/unlessの場合、elseは使えない。
条件式が改行されているunless
これが今日ソース中に見たもの。
def hoge puts 'hoge' end def poge hoge unless false end poge
rubyと改行
基本的にrubyは改行が効く。なぜなら解釈を続けるためにバックスラッシュがあるから。
puts 1+1 # => 2
puts 1 +1 # => 1
puts 1+ 1 # => 2
puts 1\ +1 # => 2
つまり+で改行された場合は、まだ続きがありそう!だと思って次の行も読んでくれるというわけか。バックスラッシュを入れると当然続けて評価される。
ifやunlessの場合も後に条件式が来ることを待っているから改行後の式が評価されてるんですね。
まとめ
無意味な改行はやめてほしい