著作一覧 |
var condition = true; if (!longlongvariablename.longlongcondition()) { if (!otherlonglongvariablename.longlonganothercondition()) { condition = false; } condition = false; } return condition;
は?
多分、こんなかんじだったのだろう。
var condition = true; if (!longlongvariablename.longlongcondition()) { condition = false; } return condition;
で、otherlonglongvariablename.longlonganothercondition()が必要となったのだろう。こういうおそろしく長い名前はタイプミスの元だ。というわけで、コードの別の箇所から次のコードを見つけ出してコピペしたに違いない。
if (!otherlonglongvariablename.longlonganothercondition()) { condition = false; }
そこで安心してしまったのだろう。
コピペそのものは悪いものではない。タイプミスするより1億倍ましだ。
でも、後が最悪だ。
おそらく、次に悪いのはこういうやつだ。
var condition = true; if (!longlongvariablename.longlongcondition()) { if (!otherlonglongvariablename.longlonganothercondition()) { condition = false; } else { condition = true; } } return condition;
こういうのが悪いのは、不真面目なところだ。
もう少しまじめに考えれば、最初の間抜けなコードが生まれることはない。
var condition = true; if (!longlongvariablename.longlongcondition() && !otherlonglongvariablename.longlonganothercondition()) { condition = false; } return condition;
ifを重ねる必要はまったくないのだから、&&で結合するだけで良い。
しかし、そもそもなぜifが必要なのだろうか?
もし最初のコードが次のようだとする。
return longlongvariablename.longlongcondition();
そこに、otherlonglongvariablename.longlonganothercondition()という条件を追加するとしたら、いやでも次のようにするだろう。
return longlongvariablename.longlongcondition() || otherlonglongvariablename.longlonganothercondition();
まったく最初のような間抜けたコードが出る幕はない。
結局のところ、だらしなさの連鎖が招いた当然のバグなのだった。
ジェズイットを見習え |