jFD開発したりしなかったり日誌
2006-07-18 [長年日記]
_ 新ソフトアイディア
日曜の真夜中、やっと終わった作業結果をメールで送信した。
既に終電も行っちゃって帰れないし、ゲームで遊んだりして時間を潰してたが、
ふとひらめいた。
メールの送信のタイマー予約が出来るソフト欲しいかも。
大変さをアピールするために、午前2時半とかにメールを送信するように
設定して18時半に家帰るとか。
ただし、その18時半から2時半の間に状況が変化して、つじつまが合わなくなったら
困るので、メール経由で送信中止が指示できるようになってるとなお良し。
ソフト名はアリバイメール。
誰か作ってそうだなあ。
_ 遠方に想いを馳せる
言い換えると現実逃避中。
このプロジェクトが終わったら、夏休み+代休でどこか遠くに行く。
今年は北海道に行きたかったが、休みが取れる頃には夏が終わって寒くなってしまう。
九州か四国か。
東北も悪くないか。
Chokujin師匠に会いにいく旅とか。
_ 1,catchの中が空
これをやったら今すぐ自分の首を絞めて死んでください。
さあ遠慮無く。
catchの中が空ということは、例外が発生してもすべての情報を
握りつぶして何事もなかったように動作を継続する、ということです。
一見ちゃんと動いているようで、実は内部的には洒落にならない
不整合を起こしていて、さらにどこで問題が起こってるか不明、
という最悪な状況になります。
問題が発生してるのに動いてるのは、問題が発生して落ちるよりも
悪い状況というのを理解してください。
ただし、本当に例外が起きても起こらなくてもよいシチュエーション
(後処理とか)ではこの限りではありません。
_ 3,後処理をtryやcatchの中に書く
例えばストリームを開いて何らかの処理を行う場合、後処理でストリームを閉じる
必要があります。
ストリームの処理はIOExceptionが投げられる可能性がありますが、
そうなると処理が分岐するので、すべての分岐の最後に後処理を書いてくれる人が
未だにたまにいます。
また、途中でreturnが呼ばれる場合も、そこに後処理を書いてくれたりします。
こんな感じ。
InputStream is = null; try { is = new FileInputStream("text.txt"); while((int i = is.read()) != -1) { // 適当な処理 if(xxx) { try { is.close(); } catch (IOException e) {} return; } } try { is.close(); } catch (IOException e) {} } catch (IOException e) { try { is.close(); } catch (IOException e) {} }
_ 投げられる例外の種類が多かったり、returnの数が多かったりすると
もっと悲惨なことになります。
信じられないことに未だに理解してない人が多いですが、
finallyはtryの中で例外が投げられようが、
returnが呼ばれようが、スレッドが生きてる限り必ず実行されます。
こういうのは最後にまとめてfinallyの中に書きましょう。
InputStream is = null; try { is = new FileInputStream("text.txt"); while((int i = is.read()) != -1) { // 適当な処理 if(xxx) { return; } } } catch (IOException e) { // 例外処理 } finally { try { is.close(); } catch (IOException e) {} }
_ 次、やるべき事
1,例外は大きく囲う
やっちゃいけないことの2と繋がりますが、メソッドの頭にtryがあって、
最後にcatchがあるくらいでいいです。
finallyを使って後処理をきちんとやれば、大体はそれで済みます。
_ 2,積極的にメソッドの外に例外を投げる。
例えばDBを操作するプログラムで、処理に失敗したらfalseを返す、
なんてメソッドを見かけます。
こんなシグネチャで。
public boolean doXXX();
こういうのは、
public void doXXX() throws SQLException;
とした方がよいです。
戻り値で成功か失敗かを判定する場合、呼び出し元は
if(!doXXX()) { // エラー処理 }
_ 3,例外クラスを賢くする
例外も一つのクラスなので、いくらでも拡張が出来ます。
Exceptionを継承して、コンストラクタを上書きしただけの例外クラスを
書く人がいますが、例外クラスに機能を持たせることでコードを大きく
簡略化できることがあります。
たとえばよくあるパターンで、エラーコードを例外クラスに持たせて、
catchした側がそのエラーコードからエラーメッセージを調べて表示する、
なんてコードを見かけます。
そういうのは、エラーメッセージを調べる機能を例外クラスに持たせれば
コードを簡略化できます。
public class SampleException extends Exception { public SampleException(int errorCode) { // 初期化処理 } public String getErrorMessage() { // リソースからエラーコードを元にエラーメッセージを取得する } }
_ エラーメッセージを例外が知っていることは自然ですよね?
綺麗なプログラムを書くコツの一つは、使う側より使われる側に機能を持たせる
ということです。
良いコードは使い回しが効くので、使われる側が1に対して、使う側が複数あります。
なら数の少ない使われる側に機能を持たせた方がコードがすっきりするのは
自然なことです。
try { // 適当な処理 } catch (Exception e) { if(e instanceof IOException) { // IOException用処理 } else if(e instanceof NullPointerException) { // NullPointerException用処理 } else if(e instanceof InterruptedException) { // InterruptedException用処理 } }
- http://search.nikkei.co.jp/c/t?keyword=男全裸 画像&site... ×31
- http://search.nikkei.co.jp/c/t?keyword=男全裸 画像&ws=1... ×23
- http://www.mooter.co.jp/moot/?keywords=日本人 ゲイ動画&do... ×10
- http://www.mooter.co.jp/moot/?keywords=ホモ 動画 日本人 ... ×5
- http://search.hatena.ne.jp/search?word=小学生ヌード&site... ×4
- http://www.mooter.co.jp/moot/?keywords=日本人 ゲイ画像&pa... ×3
- http://www.mooter.co.jp/moot/?keywords=ゲイsex&domai... ×2
- http://www.baidu.jp/baidu?tn=baidujp&cl=3&ie=utf-8... ×2
- http://www.mooter.co.jp/moot/?keywords=SEX画像 小学生&p... ×2
- http://www.mooter.co.jp/moot/?keywords=日本人ゲイ 動画&pa... ×2
- http://www.mooter.co.jp/moot/?keywords=小学生 SEX動画&d... ×2
- http://search.nikkei.co.jp/c/t?keyword=高校生SEX&site... ×2
- http://wrs.search.yahoo.co.jp/S=2114736003/K=高校生SE... ×1
- http://search.nikkei.co.jp/c/t?keyword=小学生 裸 写真&si... ×1
- http://wrs.search.yahoo.co.jp/S=2114736003/K=全裸プロレ... ×1
- http://wrs.search.yahoo.co.jp/S=2114736003/K=av se... ×1
- http://www.yahoogle.jp/yahoo-1-ゲイ日本人動画.html ×1
- http://wrs.search.yahoo.co.jp/S=2114736003/K=ホモ 洋物... ×1
- http://www.mooter.co.jp/moot/?keywords=高校生裸画像&doma... ×1
- http://wrs.search.yahoo.co.jp/S=2114736003/K=ギルガメッ... ×1
- http://www.mooter.co.jp/moot/?keywords=画像 ゲイ 小学生&p... ×1
- http://www.yahoogle.jp/yahoogle-2-男全裸画像.html ×1
- http://www.mooter.co.jp/moot/?keywords=画像 ゲイ 裸&pag... ×1
- http://www.mooter.co.jp/moot/?keywords=日本人ゲイ 動画&do... ×1
- http://www.mooter.co.jp/moot/?keywords=画像 ゲイ 小学生&p... ×1
- http://wrs.search.yahoo.co.jp/S=2114736003/K=小学生のs... ×1
- http://www.mooter.co.jp/moot/?keywords=ゲイ ホモ ちんこ 画... ×1
- http://wrs.search.yahoo.co.jp/S=2114736003/K=高校生SE... ×1
- ボディビル 動画 ×34 / 全裸プロレス ×31 / 男全裸画像 ×29 / 男SEX動画 ×23 / 男ボディビルのヌード ×15 / 高校生ボディビル ×14 / ボディビル SEX ×11 / 日本人のホモsm動画サンプル ×10 / ちんこ画像 ×9 / ゲイ全裸 ×8 / イケメン日本人全裸 ×8 / プリンケツ 動画 ×8 / ゲイ画像 高校生 ×8 / 高校生ゲイ動画 ×8 / 洋物サンプル ×7 / ゲイ全裸画像 ×7 / 小学生用SEX ×7 / 洋物 サンプル動画 ×6 / ボディビル大会 高校生 ×6 / 日本人全裸画像 ×6 / 全裸サンプル ×6 / プロレス 全裸 動画 ×6 / 高校生sex画像 ×6 / 高校生SEX ゲイ ×6 / ボディビル動画 ×6 / ボディビル学生画像 ×6 / プリンケツ動画 ×6 / 男 全裸画像 ×6 / 学生 全裸 画像 ×6 / 日本人全裸動画 ×5 / sex動画 ホモ ×5 / ボディビル 学生 イケメン ×5 / 高校生ボディビル画像 ×5 / 日本人ゲイ動画 ×5 / AV男優のちんこ画像 ×5 / 学生ゲイ画像 ×5 / ゲイsex動画 ×4 / 高校生 裸画像 ×4 / ”ボディビル”+"男"+画像+動画 ×4 / ボディビル ホモ ×4 / ゲイsex ×4 / ゲイ 動画 高校生 ×4 / 男sex ×4 / "全裸プロレス" ×4 / SEX動画 ちんこ ×4 / 学生ゲイ全裸写真 ×4 / 洋物AV サンプル ×4 / 複数サンプル動画プレイSEX ×4 / ゲイ 全裸 画像 ×4 / 小学生と高校生ゲイ動画 ×4 / 全裸 プロレス ゲイ ×4 / ゲイ 日本人 画像 ×4 / 小学生 sex ×4 / ゲイ 動画 日本人 ×4 / 男 SM 動画 ホモ ×4 / 鉄拳5 大会 ×3 / 高校生裸 ×3 / sex動画 ×3 / 小学生SEX ×3 / ボディビルゲイ ×3 / ゲイ、動画、日本人 ×3 / ボディビル サンプル 動画 ×3 / 高校生SEX画像 ×3 / ボディビル 画像 ×3 / 洋物AVサンプル ×3 / 日本人 ちんこ画像 ゲイ ×3 / ゲイsex ×3 / ゲイ画像 ×3 / ボディビル 全裸 動画 ×3 / 洋物裸 ×3 / 男 全裸 ちんこ ×3 / 高校生 ゲイ動画 ×3 / ゲイ プレイ 日本人 サンプル ×3 / イケメンの全裸sex画像 ×3 / 男全裸 ×3 / ボディビル SEX ×3 / ゲイ動画 日本人 ×3 / 日本人 男 sex動画 ×3 / 高校生SEX ×3 / 日本人ちんこ ×3 / 小学生SEXサンプル動画 ×3 / SEX 洋物 ×3 / ゲイSEX ×3 / 学生ボディビル ×3 / ゲイ SM 日本人 ×3 / 高校生sex ×3 / 洋物AV サンプル ×3 / 男全裸画像」 ×3 / 小学生sex動画 ×3 / AVプロレスSEX ×2 / 高校生 ゲイ 画像 ×2 / sex[ 動画](小学生 ×2 / 裸 日本人男 画像 ×2 / av男優のちんこ ×2 / av.sex ×2 / AV男優の全裸画像 ×2 / 男 全裸 画像 ×2 / 日本人イケメンのヌード ×2 / SEX AV ×2 / sex動画サンプル ×2