スパゲッティを解きほぐす

プログラムがスパゲッティになることはままあること


ままあるとは言え、それを直す苦労は計りしれず、
その作者を呪い殺したくなるものだ。
しかし、自分は本当にそのようなコードを書かかないのか?
自分が書かかないとは言い切れない。
コーディングする一人として自戒のためにも実際に出会ったコードをさらしておく

Perl/CGIでの事例

var $q = new CGI;
var $ac_money_n = $q->param('ac_money_n');

〜〜〜〜〜〜

if( !$ac_money_n && $ac_money_n != 0 ){  # ここがやばい!
    print "Content-type: text/html\n\n";
    print "Invalid Parameter\n";
    exit();
}

前半数行ではクエリパラメータを取得して変数’$ac_money_n'に代入している。
そしてその後の条件式が問題である。
「’$ac_money_n’がundef、かつ0でない」と言っているのである。

。。。。

ありえない。。。。

普通に考えたらすぐに気付くべきところだが、
ここに行き着くまでに既に数百行の見通しの悪いコードを読んでいたためか、
ずっと見落としていた。悔しい。

いちおう本来あるべきであろうコードは以下。

if( !$ac_money_n || $ac_money_n == 0 ){ # きっとこうであろう
    print "Content-type: text/html\n\n";
    print "Invalid Parameter\n";
    exit();
}

続くかも