背景
例のごとくツイッターしてたらこんなツイートが流れてきた。
rubyきも
— ぬーばー またの名をぴろまね (@noober_ava) August 14, 2019
elseifをなんでelsifって書かないとだめなん?
Matzさんには悪いけど、これは嫌だ
これは他の言語やってて、そのあとにRubyやりだすと多くの人が疑問に浮かべる話だと思う。
実際、自分もJavascript、PHP、JavaのあとにRuby触ったのでよくシンタックスエラーさせてた。
公式回答が
それに対してなんとRubyの生みの親ことMatzがリプライで回答していた。
elif - Pythonとか。発音が変わっちゃう
— Yukihiro Matsumoto (@yukihiro_matz) August 14, 2019
elsif - Ruby, Perl。発音を維持したまま最短
elseif - PHP。eがあるのが嬉しい人も
else if - Cなど。Rubyだと文法的に許容できない。
冒頭の愚痴を投げていた人も恐縮していたが、当然だと思う(まさか拾われるとは思わない
つまりRubyでは文字数最短と発音のバランスを取った結果elsifになったというわけらしい
なんていうか、Rubyは他の言語と違って if に {} をブロックで囲まないので、else if の文法解釈ができないんだと思う。
実際Rubyは倒置ifといって val = 1 if 10 > 2
みたいな書き方もできてしまうし。。
実際以下のコードは正常に実行できるし、1が出力される。
if true puts 1 else if true puts 2 else if true puts 3 else puts 4 end end end
どう見ても最後のendが連続で続いているのがキモいが、インデントを直すと要は以下と同じである。
if true puts 1 else if true puts 2 else if true puts 3 else puts 4 end end end
2018年でも同じことをMatzは言っている。まぁPerlの流れは大きい気がする
「なぜRubyのelsifはelseifでもelsifでもないのか」という質問に対して、「elsifは発音を変えない範囲で最も短い」と説明した。補足的にはPerlやEiffelもそうだからというものもあるけど。aliasを許容するRuby文化ならelseifも予約語として認めるという選択肢もあるけど予定はない
— Yukihiro Matsumoto (@yukihiro_matz) April 25, 2018
要は慣れですかね???????(適当
ぶっちゃけIDE使ってると補完されるからそこまで気にならなくなるっていう