webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

Rubyをもう一歩進んで勉強する5章(Rubyが出す警告について)

Rubyはコンパイルすることなく、即座に実行できる言語ですが、実際は構文解析などコンパイラ的な処理を行ってから実行されます。

コンパイラフェーズで出される警告は特に重要で、その大多数が曖昧な書き方ゆえ、さまざまな解釈の中から一つを選択したときに出されます。

例えば、次のような例はコンパイル時に警告が出ます

"808".split /0/

後ろの/0/は正規表現をsplitメソッドの引数に渡したつもりですが、/が割り算演算子に見えなくもありません。

スポンサーリンク

rubyでは引数をかっこで囲む必要はありませんが、あいまいさを避けるために、かっこで括るといいです。

"808".split(/0/)

同じような例ですが、あと二つ示しておきます。いずれもかっこで括るとあいまいさを避けることができます。

dirs = ['usr', 'local', 'bin']
File.join *dirs  # --> File.join(*dirs)

dirs.map &:length #--> dirs.map(&:length)

いずれも掛け算演算子、and演算子に見えなくもないですね。

このほか、よくある警告として、定義されているが使われない変数が存在しているとき、ループ内のローカル変数をループ外でも使っているときなどがあります。

これらの警告はRubyが僕たちのコードを意図したとおりに実行してくれるために解消しなくてはなりません。

最後に、これらの警告を実行時に表示する方法を以下に示します。

  • コンパイラ時警告

コンパイラ時警告を出すには、rubyスクリプトの実行時に-wオプションを渡すことで可能になります。

ruby -w script.rb しかし、webサーバやタスク実行時にはこのオプションを渡すことができないので、代わりに、RUBYOPT環境変数に-wを渡すことで可能になります。

  • 実行時警告

実行時警告を表示するにはグローバル変数$VERBOSE(別名$-w)にtrueをセットすることで可能になります。

falseをセットすると警告の数が減り、nilをセットすると警告は表示されなくなります。

Effective Ruby

Effective Ruby

たのしいRuby 第5版

たのしいRuby 第5版

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング