ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

rubyのunlessと改行について調べる

はじめに

仕事で大規模な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

hoge

rubyと改行

基本的にrubyは改行が効く。なぜなら解釈を続けるためにバックスラッシュがあるから。

puts 1+1
# => 2
puts 1
+1
# => 1
puts 1+
1
# => 2
puts 1\
+1
# => 2

つまり+で改行された場合は、まだ続きがありそう!だと思って次の行も読んでくれるというわけか。バックスラッシュを入れると当然続けて評価される。

ifやunlessの場合も後に条件式が来ることを待っているから改行後の式が評価されてるんですね。

まとめ

無意味な改行はやめてほしい