亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

ダメ、ゼッタイ。

「例外に依存するロジックは駄目ですよ」(http://blogs.wankuma.com/ognac/archive/2009/12/06/183569.aspx)より。

紹介されていたコードがこちら。

 while(!eof(元データ))
 {
  try
    {
      sql実行(update TABLE set xxx=@xxx  , yyy=@yyy    where ユニーク条件)
    }
    catch()
    {
      sql実行(insert into  TABLE (xxx,yyy) values (@xxx,@yyy) )
    }
 }

実は、笑えないんですよねー。(今となっては笑い話)
OJT中にファイル読み込み処理が異常に重くなってしまって、原因が以下のようなコード。

 int i = 0, j = 0;
 while(true)
 {
  try
    {
      hoge = hogeList[i,j];
    }
    catch(OutOfRangeException ex)
    {
      j = 0;
      i++:
    }
  j++;
  //ちなみに配列のサイズは1024x1024
 }

(実際はOutOfRangeじゃなくて別の例外だった。要は折り返し条件の判定が面倒なので全部例外でやっちゃえ、という発想。
今思うと、これはひどい。

業務例外はもとより、ただの想定動作を例外投げちゃあいけない。