今回のわんくま名古屋ではLTを一本受け持ったんですが、そのスライドを公開します。
IDisposable を成敗する
IDisposable オブジェクトを生成したら、必ず Dispose() しなければなりません。
ファイル操作系の処理などでよく使われる IDisposable オブジェクトですが、COM系のライブラリでは重要度が飛躍的に高まります。
というか、ほとんど全部が IDisposable オブジェクトだしねぇ……
IDispose オブジェクトは例外が発生した場合でもきちんと処理しないといけないわけですが、これがまためんどくさい。
単純な try-catch 構文では大量のタイプ量と多段ネストに悩まされ、using構文を使ったとしても多段ネストの問題はクリアできません。
LDAPだったら3段程度なのであまり問題になりませんが、Excel操作では地獄を見ます。
ところがこの問題は、Stack
を使えばあっさりとクリアできてしまうんです。
生成した IDisposable オブジェクトをスタックにガサガサ突っ込んで、finally節で foreach 使ってスタック要素を Dispose() すればOK。
これが非常に強力で、これまで多段ネストのせいで落ちていた可読性が、格段に良くなります。
しかも、Dispose() のし忘れはなし。
これが、私が C# からの Excel 操作を得意としている理由なんですね。
さらにこの機構を育てると、いっぱしのフレームワークになります。
次回の名古屋では、このフレームワークについて発表したいなと思います。