新人PGとの書簡 フラグの考え方ーフラグは作らない

お疲れ様です、Tです。
 昨日仕上げたTOOLの不具合の修正と要望の対応を行いました。
不具合はフラグ管理のミス。
要望はログの出力時、毎回新規でログを出力してほしいというもので、既存ファイルにイベント実行時に一行ずつ追加していました。
「実行」→「ログ書き込み」→「エラーがあればエディタを開く」
→「実行」→「※エディタが開いていたら閉じる」→「ログを追記」→「エラーがあ
ればエディタを開く」・・・
という作りです。※はフラグで管理しています。
Tさん、お疲れさまです。
 上書きに失敗するとしたら、通常はなにかのプロセスがそのファイルを掴んでいると思います。そうでなければ権限の問題か。
さて、フラグはプログラミングでよく使いますが、いちどフラグについて考えておく事を勧めます。
重要な事は二点です。
1.フラグは作らない
フラグの話なのにいきなり「作らない」は無いよと思うでしょうが、フラグは明確な理由がない限り作らず、直接状態を確認するコードを書きましょう。
たとえば、IsEditorOpen というフラグを作らず、IsEditorOpenという関数を作って、その中で対象のファイルを握っているプロセスが無いか確認します。
自分のプログラムから「ファイルを開いたらフラグをON、閉じたらOFFにする」という方法は、ロジックが分散する、及び考慮外のケースがいろいろ発生する可能性が高いからです。
直接状態を確認することで、下記の理由でバグを作る可能性を減らす事ができます。
 フラグを管理するコードを書くが必要なくなる。
 プログラムの拡張、修正に依ってフラグ管理のケースを再検証する必要が無い。
DBを読むような重い処理でも、直接的な処理を走らせちゃってください。処理速度がそのアプリの要件を満たせないような問題となったら改善すれば良いのです。
例えば、オブジェクト指向設計では、フラグは作ってはダメというルールがあるくらいです。
続く
Posted in

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">