読者です 読者をやめる 読者になる 読者になる

途中でreturnしたいんだワン

ということで、簡単なステートマシンを書いてみた。
書き殴りではあるが、
http://codepad.org/8wkH7y5G
で、この中でこんなコードを書いた。

bool Person::action()
{
    if (isStand()) {
        fsm_.change(&standState_);
        return true;
    }
    if (isMove()) {
        fsm_.change(&moveState_);
        return true;
    }
    return false;
}

ステートマシンを書いていると
こういうことは起きそうだ、
と思われる。
で、将来、
isJumpだとか、isTalkだとか
isHappyだとか、isAngryだとか、isEatだとか
なんかいろいろできるかもしれなくて、
実際には単なるループになるかもしれなくて、
でも、そうした条件が重なったとき、
途中でreturnした方が可読性が高いと思っているので、returnする。
勿論、ネストして、うだうだやるのはまっぴらごめんだ。

「可読性が高いから途中でreturnする」
「可読性が高いから最後でreturnする」
なんだ、目的は一緒じゃないか!
じゃ、可読性を高くするために書いた自分のコードを信じれば良いし、
誰かから正当な理由で「読みにくい」と言われたら、ないしは自分が思うようになったらリファクタリングすればいい。
決して「最後でreturnしないのはおかしいor途中でreturnするのはおかしいから」なんて理由からじゃなくてね。


そうそう、
やることがないなら、ないしはやることやったら、
さっさとreturnする、というのは読みやすいコードだと思ってるんだけど(自分は)。


あと、実はminekoaさん経由。
GOTOが必要とされるときとは? - みねこあ
gotoであっても、もし熟考の結果必要なら使って、必要じゃなくなったら直せば良いと思う。
C++インラインアセンブリとかも書くから、
可読性だけが正義でもないんですけどね。orz...
効率性も正義だし、もう少し泥臭い黒魔術も正義だったりする。
効率性故に可読性が犠牲になることもあり、それはそれで正義なのだ。