| 著作一覧 | 
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();
まったく最初のような間抜けたコードが出る幕はない。
結局のところ、だらしなさの連鎖が招いた当然のバグなのだった。
| ジェズイットを見習え |