[Java]Java7からはヨーダ記法はイディオムではなくなった?

2015年7月27日月曜日

Java

ヨーダ記法というのがある。オブジェクト(特に文字列)を比較する際にnullチェックを省略するために対象のオブジェクトではなく、リテラルの方のequalsメソッドを使う手法だ。

String jedi;
...
if ("Yoda".equals(jedi)) 
...
確かにこれならstrがnullでもNullPointerExceptionが発生しないし、条件分岐はfalse側に行く。

なんだけど、Java7からはObjectsクラスが導入された。
Objectsメソッドにはstaticメソッドとしてequlasメソッドが存在するので、こちらを使うほうが今後のイディオムになるかもしれない。

boolean Objects::equals(Object a, Object b)

このメソッドはaとbのどちらかがnullの場合はfalseを返し、両方がnullの場合はtrueを返す。両方ともnullではない場合はa.equals(b)の結果が返される。
Objectsメソッドにはequalsメソッド以外にもオブジェクト比較やnullチェックに便利なメソッドがあるので、Java7以降でコードを書く場合は使ってみるといいかもしれない。

ちなみになぜヨーダ記法なんて呼ばれているかというと。。。
スターウォーズのヨーダが通常の英語とは違う語順でしゃべるからだそうです。