Headline About TechLog Download Java VBA Link

January 23, 2008.

プロジェクト遅延中


このところとても寒いですね。室内でも暖房が無いと我慢できないぐらい。昔は寒さに強かったbaristaですが、体質が変わったのか、最近では暑さよりも堪えます。とはいえ、雪ではなく雨が降っているぐらいで、これでも随分と暖冬なのでしょう。そもそも気候自体は変動の大きなものなので、瑣末な温暖化で騒いでも仕方がありませんが、ちょっと速度が速すぎるので、将来が心配。人類のではなく、自分や身の回りの人間の。そのぐらいが自分の身の丈だと思っています。

 

この所、線表から随分作業が遅れています。と言っても仕事の話ではなく、個人的なプロジェクトの方ですけど。

アプリ開発の方はオフィシャル作者登録で大遅延。4営業日かかるとの事だったため、8日提出、16日認可との計画を建て、実際には9日に提出しました。しかし、15日に登録目的を問うメールが到着し、返信したところ、著作権に関する再問い合わせをうけ、結局18日にようやく、お互いの理解が成立しました。しかし、23日現在もまだ登録完了メールを受け取っていません。理解のできる遅延なので仕方がありませんが、実機でないと把握できない問題もあるので..。早く認可下りないかなぁ。

英語関係のプロジェクトは全体を理解しないと誤解しそうな為、方針変更。通読を優先しているため、かなり遅延している。通読は今月の目標ページをOverしているし、雰囲気はつかめたので、どこかで時間をとって追いつきたいところなのですが...。

唯一調子がいいのはwebページの更新。最近暇なのでVBなどの復習をしている余裕があるためです。また、長らく放置していたJUnitの記事もUPしました。今のところGoogle受けが良く無いらしく、余り活用されていないのが悲しいところですが....。今月中にあと2、3ページ更新できたらいいなという贅沢な目標を立てています。って気づけばあともう1週間しかないので厳しいかな??

 

 

【ファイナリー・ファンタジー】

ファイナルファンタジーではない。finally節のお話。Javaには例外機構があり、プログラム中で例外が発生すると、そのあとの処理を全てすっ飛ばし、catch節に処理が移動する。したがって、catch節にエラー処理を記載しておくわけだ。この時、connectionが貼られていたような場合は、取り合えずclose()する処理が必要となる。実際のコーディングではExceptionでなく、IOExceptionなどのサブクラスをそれぞれcatchする事となるので、close()処理などをそれぞれに書く羽目になる。

個々に書いていたのでは非常に面倒なため、正常終了時にも例外発生時にも実行したいような処理、例えばconnectionのclose()処理などはfinally節に書く。例えばこんな感じだ。

 

try {

  opened = connector.open("xxx");

  data = connector.getData();

  return data;

} catch (IOException ioe) {

  // エラー処理

} finally {

  if (opened) {

    connector.close();

  }

}

 

ところで戻り値を返す関数内で以下のように記述するとどうなるかご存知だろうか?

 

data = null;

try {

  opened = connector.open("xxx");

  data = connector.getData();

} catch (IOException ioe) {

  // エラー出力処理をやってから、

  throw new DataReadException("xxxのオープンに失敗しました.");

} finally {

  if (opened) {

    connector.close();

  }

  return data;

}

 

一見良さそうだが、実は呼び出し元にDataReadExceptionがthrowされる事はない。IOExceptionが発生し、newしたDataReadExceptionをthrowしろと書いたものの、必ず実行されるfinally節でreturnが書いてあると、throwを無視しdataをreturnしてしまうのだ。したがって、エラー時には例外で飛ぶからと、nullを考慮しないプログラムを書いていると、NullPointerExceptionが発生するし、呼び出しもとのcatch節の処理が行なわれないこととなってしまう。よくよく考えれば分かることだが、なかなか原因に気づかないバグなので気をつけよう。

....小技に掲載した方がいいかな??


名前: 意見: パス:

※パスにはこの日記のタイトルをコピペして下さい。


January, 2008
SUN MON TUS WED TUR FRI SAT
12345
6789101112
13141516171819
20212223242526
2728293031