トップ «前の日記(2014-10-05) 最新 次の日記(2014-10-09)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2014-10-07

_ 修正はまじめに大胆に

今日ひどいコードを見た。
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();

まったく最初のような間抜けたコードが出る幕はない。

結局のところ、だらしなさの連鎖が招いた当然のバグなのだった。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|

ジェズイットを見習え