なんでこんなプログラムなの?2例
こういうプログラムにたまに出会うと笑ってしまう
あるシステムの機能追加をしていて、自分が変更したところじゃない部分で不具合を見つけたので、その原因となったプログラムをみたら、謎のプログラムとなっていたので、ここに書く。
元の言語でなくあえての仮想言語で。
function printyaer(string currentyaer)
string w_yaer=currentyaer //マジでyaer
string w_yaer2 = w_yaer
w_yaer = substr(w_yaer,3,2) //西暦4桁うち下2桁を取得
w_yaer2 = substr(w_yaer2,3,2)
int i_yaer = strtoint(w_yaer)
int i_yaer2 = strtoint(w_yaer2) - 1 //前年を計算
w_yaer = inttostr(i_yaer)
w_yaer2 = inttostr(i_yaer2)
if len(w_yaer) =< 2 then
w_yaer = "0" + w_yaer
w_yaer2 = "0" + w_yaer2
end if
//結果を出力
print "当年度=20" + w_yaer
print "前年度=20" + w_yaer2
end function
こんな関数があり、これを
printyaer("2017")
のように呼び出すとどうなるでしょう?
これを実行すると、出力はこうなる。
当年度=20017
前年度=20016
寒い。寒すぎる。
このプログラムを作ったのは2001年以降で2010年以前だろう。じゃないとちょっと動かせばわかる。
currentyaerには、プログラム的に常に現在の年をセットしているので、気づかなかったのだろう。もうおかしい出力のまま7年も経ってるはずだが、、、。
yearのスペルミスなんてかわいいもん。
最小の修正なら、if文の=を外せばとりあえずOKになるけど西暦2100年の時に不具合が発生する。そんなところまでプログラムは絶対存在してないと思うけど。
こういう時って他のプログラマーはどうしてるんだろうか。
今回僕はほとんど書き換えて、2100年でも正常に動作するようにはしたんだけど、意味はないね。
っていうか、最初に作った人、、もうちょい考えて作ってくれ、、、。