2010/04/12

左定数について

Joel on Softwareを読んでいると、ちょっとした豆知識がでてきたのでメモ。

関係演算子(==)を使おうとして、うっかり代入演算子(=)を使うことってありますよね(ねーよ)。
SJC-Pの問題でもよく見かけた気がします。
たとえばこんな感じ。
// hoge変数がnullかどうかチェックしたいif (hoge = null) {// 処理}


本来ならnullチェックをするには以下のように書くべきところを
上記のように代入演算子を使って書いてしまうとnullチェックするつもりが
nullを代入してしまうということになってしまいます。
hoge == null


これを不正でくれるのが左定数です。
if (null == hoge) {// 処理}

このように書いておけば、以下のような間違った記述をコンパイラが発見してくれるので嬉しいです。
if (null = hoge) {// 処理}


そんなのいらねーよという意見もあると思うので、一概に左定数が良いともいえないかもしれませんが。