if(front==false) {front=true;} else {front=false;}

みんなでガチャガチャ書いたソースコードを、先日、全部ざーっと眺めて無駄を省く作業をしていました。
そこで、少し面白いコードに出会ったので、「こうするといいかもしれないよ」という添削です。

問題のコード

if (front == false) {
    front = true;
} else {
    front = false;
}

frontという変数は、カメラがフロントカメラかリアカメラかを表すブール値でした。
以下、ソースコードを論理的には変えずに、書き換えていきます。

if文の中身が1行だったら、かっこは付けなくても良い。

if(front == false)
    front = true;
else
    front = false;

思想的なものもあるようですが、つけなくても良いです。つけないといけない言語もあります。

trueやfalseと比較する必要はない。

if(!front)
    front = true;
else
    front = false;

falseと比較するのではなく否定演算子を使って書けば簡単です。trueと比較するコードも時々見かけますが、あえて付ける必要は無いんじゃないかと個人的には思います。

何を代入するかを分岐したいなら三項演算子も使える。

front = (!front)?true:false;

ある変数に代入する内容をif文で分岐するということは良くありますが、これは三項演算子で置き換えることができます。ここは可読性で好みが別れるところですが、4行が1行にまとまるのは素敵です。

そもそも否定演算の結果を代入することができる。

front = !front;

否定演算で振り分ける対象がtrueとfalseなら、単に否定演算した結果を代入すれば終わりです。スイッチをタッチするたびにオンオフを切り替えるみたいな処理で良く出てくるコードです。
一番最初のコードは、たぶん色々試行錯誤していて迷子になった結果なんだと思いますが、実は簡単にまとまるという話でした。少しソースコードをまとめるテクニックを身につけて、頭のなかでパズルを組み立てられるようになると、コーディングも楽になるかもしれません。

コメント

タイトルとURLをコピーしました