改め Objective Technician

はぐれ技術者のやりたい放題

負の遺産

2007-03-01 20:10:55 | プログラミング
実は、この前のスライディングブロックパズルプログラムで、やっちゃいけないと言われていることをやっている。


ソースコードを一文ずつ見てるようなよっぽど暇な人はいないと思うけど、
実はheuristic()関数でgoto文を使ってる。


このgoto文、プログラムの任意のポイント(ただし同じ関数内)に自由にジャンプできる制御文で、この前は二重ループから脱出するのに使った。


一見とても便利な制御文だけど、これを乱用するとプログラムが構造的でなくなり後で何が何だか分からなってバグの温床となるので、どのプログラミングの本を見ても「使うな」って書いてある。


実際、gotoを使わなきゃ実現できないルーティンは存在しない。


さらに、ダイキストラ博士が「Structured Programming」(構造化プログラミング)という論文で、いわゆる「goto文有害論」を提唱してるもんだから、「独習C」では


監注で「goto文を使うプログラマは嫌われます」と書かれている(445ページ)


いじめられっ子のような存在。


言語自体にgotoが存在しないという形でも虐げられている。



ホントのところ、ダイキストラ博士が言ったことが一人歩きして「gotoは危険だ」みたいになってるけど要は乱用するなってことで、多重ループから抜け出すときだけはこれがないと非常に困る。それに、continue文やbreak文、exit()関数なんかの例外処理もある意味gotoと似たようなモンで、そんな目くじら立てて制限しなくてもいいんじゃないって思う。