(ruby) 後置if式で実行内容を複数個書きたい場合

rubyに関する記事一覧→ rubyのまとめ



rubyには 先に実行内容を書いて、その後に if を挟んで 条件式を書く書き方があります
if修飾子 とか 後置if って言われているやつですね

puts('hello') if true

便宜上 trueと書いてますが、この部分に条件式を書くわけですね
この例では条件式は true なので puts('hello')が実行されます


ただし実行されるのは ifの左隣の一つだけです
複数個の処理を対象としようとして

puts('hello'); puts('world') if false

と書き 条件式がfalseの場合なら「hello」も「world」も表示されない のを期待しても
思ったような動作はせず
「hello」は true false に関わらず表示されてしまいます。
つまり ;を使ってワンライナーで書いたとしても
puts('hello') の方は 後置ifには掛かっていないという事ですね


こういった場合には この二つの処理を () で括って纏めてしまえば
二つとも 後置if に掛ける事が出来ます

(puts('hello'); puts('world')) if false


複数行に渡って処理を書く必要がある時は 普通のif式を使った方が良いとは思いますが
後置if でも複数行に渡る処理を書く事は不可能ではありません

(
	puts('hello')
	puts('world')
	exit()
) if true
sleep(100)

この例では3行とも実行されますので sleep以前に exitで実行が終了されます


少し実用的な書き方をすると

(puts('コマンドラインオプションで入力ファイル名を指定してください'); exit(0)) if (ARGV[0] == nil)

こういう感じになりますかね