途中で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...
効率性も正義だし、もう少し泥臭い黒魔術も正義だったりする。
効率性故に可読性が犠牲になることもあり、それはそれで正義なのだ。