和洋風KAI

【Ruby】if文やunless文の条件を複数行で指定する方法

今日も元気にRubyを書いています。するぷ( @isloop )です。

2日ほど前からいくら調べても対策が出てこなかったのが、Rubyでif文を複数行で書く方法です。

Rubyは行末にセミコロンが要りません。つまり改行することでここは文末だと把握しているわけですが、その仕様のおかげで下のObjective-Cのようにif文を複数行で条件を指定できませんでした。

if ([str isEqualToString:@"水樹奈々"]
|| [str isEqualToString:@"茅原実里"]
|| [str isEqualToString:@"田村ゆかり"]){
print "声優さんです。";
}

そんなに条件文が長くないならアレですがどうしても長くなるところがあったので、視認性を上げるためにどうしても複数行で書きたかった。

「どないしよ・・・。orz」

と思って最後の手段で英語でググってみたら出てきてくれましたよ。我らがヒーローStackOverflowさんが!

Rubyは行末にバックスラッシュをいれると複数行に渡って命令が書ける!

StackOverFlowさんによると下のように行末にバックスラッシュをいれることで複数行に渡って条件を指定できるとのこと。

items = (data[‘DELETE’] || data[‘delete’] \
|| data[‘GET’] || data[‘get’] || data[‘POST’] || data[‘post’])

引用元:ruby – “OR” Operator must be placed at end of previous line? (unexpected tOROP) – Stack Overflow

さっそく試してみたらできた!やったぜ!こんちくしょう!

if str == "水樹奈々"   \
|| str == "茅原実里"  \
|| str == "田村ゆかり"
puts "声優さんです。"
end

おかげさまでコードの視認性をあげることができました。

Objective-Cのときもそうでしたが、RubyもやはりStackさんにはいいネタが詰まっておりますな。

このコメントを世界のどこかでしたためてくれたakonsuさんどうもありがとうございました。