2012年09月10日

.NETプログラマーから見たJavaの不満など

こんな記事みつけた。

http://el.jibun.atmarkit.co.jp/yamayattyann/2012/09/java-4816.html

C#とかのプログラム経験があって、チームリーダークラスの人が見たJavaに対する不満だそうな。
この手の話はC#が作られた当初からさんざん言われているので、特に目新しい内容はないんだけど、
気になる項目が一つあったので、触発されてこちらも書いてみた。
 

 
指摘項目のうちほとんどは、プロパティがないとかAutoBoxingがないとか関数型がないとかの瑣末な話題だったのでどうでもよかったんだけど、きになるのはJavaの例外の仕組みの話。

これ、どっかの記事でも呼んだ気がするんだけど、基本的にJavaのチェック例外っていう仕組みは害悪しかないっていうのが最近の風潮であり、引用元の記事でもそれが指摘されていた。

チェック例外とは、関数定義の部分で例外をスルーする宣言が行われるもので、呼び出し元は必ず何らかの形でそれを処理しなきゃいけないものだ。例えばこんなの

private void loadConf(String fileName) throws IOException{
  BufferedReader br = new BufferedReader(FileReader(fileName)));
  ....
}
ファイルの読み書きには必ずファイル例外がつきものなので、try〜catchで捕捉するか、呼び出し元に投げ直すかしなきゃいけない。呼び出し元に投げ直すとすると

private void initComponent() throws IOException{
  loadConf(CONFIG_PATH);
  ....
}

こんなかんじで再度投げ直すこともあるとおもうんだけど、
たとえばloadConfで他の例外も投げるように仕様変更しようとおもったら

private void loadConf(String fileName) throws IOException, IllegalArgumentException{
  BufferedReader br = new BufferedReader(FileReader(fileName)));
  ....
}
呼び出し元も修正の必要が出てくるので

private void initComponent() throws IOException, IllegalArgumentException{
  loadConf(CONFIG_PATH);
  ....
}

めんどうだから丸めちゃったりするよね。

private void loadConf(String fileName) throws IOException{
  try{
  BufferedReader br = new BufferedReader(FileReader(fileName)));
  ....
  }catch(IllegalArgumentException e){}
}

これがイケないと言われている。なにもすべての呼び出し経路に例外を明示する必要なんてないんだから、C#のように最終的にどこかで補足すればいいじゃあないの。

これ、Javaのかなり根本的な問題だと思うんだけど、未だに解決されてないんだよねー。
Java7.0からは途中の例外補足いらねえよ、とかならないかな。

以上、VBではOn Error Resume Nextを過剰に使いたがるワイルドなプログラマーからの提言でした。






タグ:java
posted by LoyalTouch at 21:36| Comment(0) | TrackBack(0) | Webプログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/291630923

この記事へのトラックバック