つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

Scalaの演算子はメソッド、ではなぜ==がぬるぽにならないのか

      2015/03/22

Scalaの本やblogを読んでいるとScalaの演算子はメソッドである、という説明が出てきます。

今日はその話です。

+演算子をメソッド呼び出しで

実際にやってみると・・・

a.+(b)が成功します。

==演算子をメソッド呼び出しで・・・ぬるぽにならない

ここで一つ疑問が生まれます。

「==もメソッド呼び出しであるのならば、==のCaller側がnullだったらぬるぽになるんじゃないの?」です。

(warningは出ていますが、それは一旦置いておいて)NullPointerExceptionが発生していません。Javaならaがnullならぬるぽになりますね。Scalaでもaがnullの状態で他のメソッドを呼び出すとぬるぽになります。

例えば

なぜ==だけ・・・と思ってscalajp/public – Gitterで質問したら@xuwei_kさんが教えてくれました。

どうやらScalaコンパイラの仕様みたいです。nullチェックのコードを自動で仕込むから、だそうです。

逆コンパイルで確認

以下のコードをscalacでコンパイルして、JavaDecompilerで逆コンパイルし、確認してみます。

元コード

実行結果

逆コンパイル結果の一部

分かりづらいですが、勝手にifによるnullチェックが入っています。

という訳で、ぬるぽにならないことが分かりました。

 - Scala , ,