yucatio@システムエンジニア

趣味で作ったものいろいろ

Rubyでは、式の途中で改行するときは、算術オペレータを一番後ろに置いてから改行する

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 ]
価格:2376円(税込、送料無料) (2018/6/23時点)


複数行の式とRubyMineのフォーマッタとの相性が悪い

複数行にまたがって式を書く方法は、現在、RubyMineのフォーマッタ(Code > Reformat Code)との相性がよくないです。(RubyMine version: 2018.1.3)

yucatio.hatenablog.com

環境