Control Flow Constraint
下のプログラム、ちょっとしたバグがあります。
public void read(String name, String enc) throws IOException { Reader r = new InputStreamReader(new FileInputStream(name), enc); try { ... } finally { r.close(); } }
ファイルを確実に閉じるには、下記のように書かなければなりません。
public void read(String name, String enc) throws IOException { InputStream in = new FileInputStream(name); Reader r; try { r = new InputStreamReader(in, enc); } catch (IOException e) { in.close(); throw e; } try { ... } finally { r.close(); } }
で、このルールを美しく書けるクエリが欲しい。
- ストリームを開く式の評価結果は、次のいずれかとして同一フレーム内で利用されなければならない
- s.close()呼び出しのs
- new Hoge(...)の実引数 (上の例ではFileInputStreamはInputStreamReader#close()経由で呼ばれる)
これ、まとめてみると「ある式の評価結果は、次のいずれかとして利用されなければならない」っていうのだけ書ければ、他は従来のクエリ言語で書ける感じだ。
要は、その語彙だけ増やせばいいのかな?引き続き考察。