読者です 読者をやめる 読者になる 読者になる

中年エンジニアの開発と生活の日々

中年エンジニアがソフトウェア開発や日々の生活で得た知見の備忘録

Ruby の空白の洗礼を受けたお話

最近、AppiumにTurnipとRSpecを組み合わせてテストスクリプトを書き始めています。

今までのエンジニア人生でRubyを本格的に開発に使用するのが初めてなので、Rubyのエキスパートから見たらどうしょうもないところでつまづいてしまいました。 自分の恥を晒すついでに、忘れないために記事にしています。

それは適当に書いた1行のコードから始まった

今回、つまづいたのは以下のコード。myArrayのサイズが4かどうかを判定するテストスクリプトのつもりで書きました

expect (myArray.size).to eq 4

実行すると以下のようなエラーメッセージが

     Failure/Error: expect (myArray.size).to eq 4

     NoMethodError:
       undefined method `to' for 4:Fixnum

Fixnumには to というメソッドはないそうですよ。

勝手な解釈で試行錯誤を続ける

「あれ、おかしいのう、もしかしてexpectに数値渡すと .to eq で評価できないのか?」

と早合点したのが運の尽き。expectの引数に色々なオブジェクトを設定したりしても解決しません。30分以上試行錯誤を繰り返してようやく

「おりょ、my.Array.size の to が expect より先に評価されてるんじゃね?」

ということに気がつきました。コードをもう一度よく見てみると…

expect (myArray.size).to eq 4

「あー、expectと括弧の間にスペースが紛れてる〜」

と、いうことに気がつきました。そんなわけで、以下のようにexpectと括弧の間のスペースを削除したら動作するようになりました。

expect(myArray.size).to eq 4

まとめ

Ruby は関数呼び出しに必要な括弧をスペースで省略できる言語のため、関数呼び出しの際のスペースが重要な意味を持ちます。 これはなるべく括弧を書きたくないという思想が生み出した言語仕様でとても気に入っています。

今まで使ってきたC++JavaJavaScriptなどの言語では関数名と括弧の間のスペースは無視されていたため、あまり気にしなかったのですが、Ruby ではキッチリと意識をして空白を使わないといけないようです。