mike_neck 2012-07-31 20:51:58

[Java] リソースの閉じ忘れ このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

Javaの悪いところではあるのだが、Javaはリソースを自動で閉じてくれない。それをちゃんと知らないバイト感覚のプログラマーがリソースを扱うと残念なコードになる。また、リソースを開いた際に発生する例外をメソッドに付与しているため、例外が発生してもリソースを閉じてくれないという残念なコード。

public String Read_CSV_File (String FileName) throws IOException {
    File CSV_File = new File(FileName);
    StringBuffer sb = new StringBuffer();
    BufferedReader reader = new BufferedReader (
            new FileReader(CSV_File));
    while (reader.ready()) {
        // 何らかの処理
    }
    return sb.toString();
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(8)

#1 megascus 2012-07-31 22:31:25  

最近どっかの有名OSSでこのバグが発生していた記憶がw 他の言語からJavaに来るとつまづきやすいところですね。

#2 Temarin_PITA 2012-08-01 19:43:05  

GC(ガベージコレクタ)を過信した結果ですね。C#でも同じ。

#3 Link_Orw 2012-08-14 15:10:20  

Exceptionを理解していないけどカッコいいから書いてみました的な迷惑なコードだな

#4 oe_roel 2012-08-14 15:21:33  

別に例外投げっぱでもいいので、finally で拾ってくれれば。 大規模で低レベルな人がいる場合は、こういう閉じる概念があるものには絶対に直接触れさせないのが鉄則ですね。ただ普通の人でもとじ忘れはよくあるので、閉じる操作があるものは、普段使いには向いてないと思います。

#5 holybell9999 2012-08-14 19:16:33  

最近finallyを本気で知らない人が結構いて驚く。

#6 InternalServerE 2012-08-14 22:54:10  

大規模で低レベルな人がいる場合は、こういう閉じる概念があるものには絶対に直接触れさせない。

そうそう。

ただ、相手がバッチになるとそうも行きづらいっすよね。 IN / OUTする対象が多種多様すぎて、共通機能やFWの層で隠蔽するには裾野が広すぎて、必ず漏れる。。

例えば一口に「ファイル」と言っても論理的な構造やら文字コード、えとせえとせ

#7 sindoguest1 2012-08-15 05:00:38  

pythonのwith文のような仕組みとか、デコレータのような仕組みはJavaには無いのでしょうか。

#8 _nabbe 2012-08-17 06:01:23  

7 Java7 から try句が拡張されて、そんな感じのことができるようになります

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[Java] 内部的にunicodeだから日本語つかえ...

このエントリーをはてなブックマークに追加

これを書いた先輩に「英語で書きましょうよ...

class 会員 {
    private int 会員番号;
    p...

鑑賞する »

[C] すげーちゃんと動く!

このエントリーをはてなブックマークに追加

結合試験2日前に脱退したうんkプログラマ...

return 0;

鑑賞する »

[Java] 以前のコードが残されていて、何がなんだか...

このエントリーをはてなブックマークに追加

バージョン管理しているのに、バージョン管...

/* --- 2007.06.21 故障-ST-001 start --- */...

鑑賞する »