VB vs Delphi @夏厨2002
■ このスレッドは過去ログ倉庫に格納されています
0378デフォルトの名無しさん
NGNG分かってないね。プログラムってのは状態を持っているの。
ファイル保存のように単一の命令だけをやる場合には問題ないかもしれないけど、
実際にはイベントの中で複数の処理をやる。大抵の場合は処理のたびに状態が変化する。
処理の途中で例外が発生した場合不正な状態になる。
データベースをさわっていれば分かるけど、プログラム言語にはロールバックや
コミットというもの(一連の処理が完全に終わったか全く実行されていないの
どちらかにする機能)が無い。
例えば二つのファイルをドライブをまたいで交換するプログラムを考える。
1.FILE-Aの名前をFILE-TMPに変更
2.FILE-BをFILE-Aという名前でコピー
3.FILE-TMPをFILE-Bという名前でコピー
4.FILE-TMPを削除
このとき2の処理で例外(例えば容量不足)が起きたとする。
そうすると、ディスクにはFILE-TMP(FILE-Aの完全な一時ファイル)と
FILE-A(FILE-Bの中途半端なコピー)とFILE-Bが残る。
この状態で容量を空けてもう一度処理をすると正常に終了したように見えてファイルはは壊れている。
不安定な状態で動きつづけたためにデータが破損し、2回目の実行では正常に終了したために
データが壊れていないと勘違いする可能性がある。
他にもボタンが押されて複数のメンバ変数のうち一部のみが変更されて、例外おきてその状態で
他の処理をして一部のメンバしか変更されていない不正なデータを参照して処理を行ったり。
エラーが一回起きて不正なポインタを指したために、そのあと何をしてもエラーが出つづける。
でも一部の処理は動いたりする。こういう不安定な状態で動きつづけているのに動作を信じられるか?
もちろんこれを完全に考慮して作ればいいのだけど、デフォルトでは考慮されていない以上、
プログラムもデフォルトは例外が発生した時点で落ちたほうがいい。
■ このスレッドは過去ログ倉庫に格納されています