Javaの人間がRubyでやってしまった失敗を1つ紹介します。
意図した通りに動かないコード
こんなコードを書きました
sum = 100 + 200 + 300 + 400 puts sum #=> 300
100+200+300+400 (=10000)
のつもりで書いていましたが、最初の2つしか足されていません。
デバッグ
Rubyでは、原則として行の終わり=式の終わりなので、明示的に行が続くことを示さなければいけません。
算術オペレータを最後に置く
明らかに式が続いていると判断される場合には、次の行も続いて評価されるので、算術オペレータを後ろに置けば続く行も1つの式として評価されます。
sum = 100 + 200 + 300 + 400 puts sum #=> 1000
バックスラッシュを使う
バックスラッシュを使うと、明示的に式が続いていることを示せます。
sum = 100 + 200 \ + 300 + 400 puts sum #=> 1000
入門書にちゃんと書いてあった
『初めてのRuby』(Yugui[著])を読み返してたらちゃんと書いてありました。
次のように記述すると1と-2という別個の式が並んでいるものと解釈されます。(中略)
1 - 2
括弧を用いる方法はうまくいかない
ちなみに以下のように、式全体を括弧でくくる方法はうまくいきません。
sum = (100 + 200 + 300 + 400) puts sum #=> 700
これは、 Rubyの改行 - 永遠に未完成 のコメントで言及されているように、
sum = (100 + 200 + 300 + 400)
は、
sum = (100 + 200; + 300 + 400)
と解釈され、(100 + 200; + 300 + 400)
は(+ 300 + 400)
と等価になるからです。
Pythonだと式全体を括弧でくくるとうまくいくので、Rubyでもそうかと思いましたが、違いました。
初めてのRuby [ Yugui ] |
複数行の式とRubyMineのフォーマッタとの相性が悪い
複数行にまたがって式を書く方法は、現在、RubyMineのフォーマッタ(Code > Reformat Code)との相性がよくないです。(RubyMine version: 2018.1.3)