パフォーマンスチューニングって難しい

いや難しいってーかまぁ難しいんだけど、
結局のところ、目標レスポンスタイムとかあって、
それって・・・計測しなきゃって話なんだけど
製造段階の場合、出来るだけXXなコーディングをすること
といわれるわけで、出来るだけ・・・っておい!
って話になるわけです。


となると話が大きくなりそうですが、今回の話題はもっと小さい、ミニマムな話。
一律整理つけるなら、問題になってから考えろって事になる話です。
じゃぁ最初はどのように書くのがいいの?ってのは別だけどさ。


んで、たとえば、
Iteratorでループまわすより、
List#getでまわす方が、ArrayListとかの場合早いのは事実なわけで。
かといって、じゃぁListのサイズは大体どれくらいよ?
にも関係してくるわけで、せっかくListとして扱ってるのに
ループの為だけにinstance ofで判定するのもまぁ悪くはないんだけど
やっぱり平均してどれくらい(もしくはピークでどれくらいの)サイズ
なのさ?につながる。んで、大抵はしらないっつーの!って話になる。
(もちろん自分で全部把握してる箇所なら別だけど)


それにそんなロジックがあったら、テストで分岐させなきゃいけないし、
重要な判断にもみえてしまう。
可読性といった点ではマイナスだろうなぁって思う。
→やっぱIterator使っとくのが無難っぽい。もしくは決めうちの下で、getでまわす。


isHoge = !isHoge;
これもよく使ってるけど、
どうやら
isHoge ^= true;
とXORでやった方が早い。
実際試しても確かに早いんだけど(まぁこの実際に試してみたってのが怪しいんだけど)
いってもそもそもそんなコストがかかる事じゃない。
ナノ秒の世界の話で、ループの中で何万回とか頻繁にやるわけでもなければ・・・
って感じではある。


もっともどっちがわかりやすいか?
なんて見る人のスキル次第か・・・


isHoge = !isHoge;
によるのが無難だと思うんだけどさ・・・
これもわからんので、ifで、true、falseって書かないとわかんないことも考えられるし。
3項演算子で書く人もいるだろうし。


なんつーかやっぱりわかりやすいコードって微妙だなぁ。って。
まぁListのループでget使ってたら、Iteratorの方が〜って指摘あって、
一応こんな根拠でこっちのループ選んでるんですよ〜
っつー話から色々発展したんだけどね。


個人的にはあんまトリッキーなの書かないけど
新人時代は人のコード見てぜんぜんわかんなくて、
今思い返してもなんだあのトリッキーなの!
ってのもあるけどそれはそれで勉強になったなぁと思います(よくも、悪くも)


なので最近は別にそんな人がいてもいいかなぁ
って思ってきた。なる気はないし、メンテするのは遠慮させていただきたいですが。


基本的には、ビット演算は避けた方が(可読性としては)無難だよね。と思います