2012年8月7日火曜日

close文が欲しくなってきた

C#のusingやjavaのtry-with-resourcesなど、closeを省略できる構文はあります。 その場で使ってその場でcloseするときには大変便利です。 しかし、そんなオブジェクトばかりではありませんよね? 「ファイルを開いてユーザーが編集→アプリ終了時にclose」とかの場合、↑の構文でのcloseの省略は使えません。 closeのときに毎回決まったコードを書かなくてはなりません。

それが面倒なのでプログラム言語のキーワードでclose文が欲しくなってきました。 ifの構文を参考にすると、if文はこんな感じで、

if(条件)
{
    真の場合;
}
または
if(条件)
    真の場合;

そのifの部分をcloseに変えたようなclose文を空想。

close(Closeableオブジェクト)
{
    クローズに失敗したときの処理;
}
または
close(Closeableオブジェクト)
    クローズに失敗したときの処理;

これは↓と同等の処理です。

if(Closeableオブジェクト != null)
{
    try
    {
        Closeableオブジェクト.close();
    }
    catch(Exception exc)
    {
        クローズに失敗したときの処理;
    }
}

しかし、この書式だとクローズに成功したときの処理に見えてしまいますね。 あと、例外処理が不要な場合もあります。

それを考慮して、

  • closeするだけでいい場合
    close(Closeableオブジェクト);
  • close失敗時の例外処理が必要な場合
    close(Closeableオブジェクト) catch(Exception e)
    {
        クローズに失敗したときの処理;
    }
    または
    close(Closeableオブジェクト) catch(Exception e)
        クローズに失敗したときの処理;

う~ん。 ここまで空想したけど、スッキリした構文では無いですよね。 closeキーワードとcloseメソッドがかぶるのは言語仕様ってことにしてしまえば大丈夫かもしれませんが。

まぁ、偉い人はこういうのを考慮した末に採用しなかったんでしょうし、ポチポチcloseしていくしかないのかな?