last update: 2013/09/03

2004/12/24

偶数なら2で割る

最近(といってももう10日ぐらい前になりますが)、t-baseのえらい人の日記を読んでいたら

if(n%2==0)
    {
    n=n/2;
    }

これはインデントがおかしいなんて話がありまして、あぁまったくもってその通りだ、なんて思って読んでたんですが、「そこで3項演算子が使えるとイケてるCプログラマですね」なんてつっこみがはいってて、あぁ確かにそれは言えてるかも、でもオレ最近3項演算子なんて使ってないなー(どうもあれは可読性が低くなるような)なんてことを思ったわけです。あ、ちなみに3項演算子で書くと

n=(n%2==0)?n/2:n;

こんな感じになります。見た目1行で簡潔に書かれてるので確かに見やすいと言えば見やすいですが、まぁコンパイラがさっきのif使うコードと3項演算子のコードを最適化したらたぶん同じようなコストのコード吐くだろうから(いや、調べてないんでわかんないですけど)、個人的にはifつかったほうが見やすいなぁなんてことをおもったり。

んじゃあこれをifも3項演算子も使わないで書けるか? とか考えるのがひねくれたプログラマでして、まぁこの「偶数なら2で割る」というルーチンはifも3項演算子も使わず書けます。むしろ条件分岐なしでいけるんですが、さて皆さん分かります?

まぁせっかくなのでいまここで答えを書くとアレなのでちょっと引っ張って明日か明後日あたりに解答発表といきましょうか。まぁ頭の体操レベルなので正直どうでもいいですね、こんな話は。

comments powered by Disqus