for文の初期化部で宣言した変数のスコープが終わる前に終了時処理を挟みたい
for文の初期化部で宣言した変数のスコープが終わる前に終了時処理を挟みたい
タイトル文の通りですが、for文に終了時処理を挟むきれいなやり方って何でしょうか?
例えば配列を操作する処理を行うときに、終端にだけ特別な処理を行いたいときとかあるじゃないですか。
実直に実装するなら、
for ( int i = 0; true; i++ ) {
if ( i == N ) {
// 終了時処理
break;
}
// ループ処理
}
// または
for ( int i = 0; true; i++ ) {
if ( i < N ) {
// ループ処理
} else {
//終了時処理
break;
}
}
// この例は条件式が i < N なので、例えば arr[N - 1] = M; とかできますが、それはなしで
となるんでしょうけど、せっかくfor(初期化;条件式;変化式)
で実装されてあるのにそれをtrue
にして、ループが終了する条件をfor()
文内に書いてるのも気持ち悪いです。
while(true)
は感情的に許せるのですがwhile
文を使おうとするならint i
のスコープが外にまで出てしまうので、
if ( true ) {
int i = 0;
while ( i < N ) {
// ループ処理
}
// 終了時処理
}
と無駄なif(true)
でスコープを指定しないといけないのがまた、気持ち悪いです。
というのも最近、try, catch, finally
の例外処理というものを知って、それが出来るならfor()
にもfinally
みたいなのが欲しいと思ったのです。
理想としては、
for ( int i = 0; i < N ; i++ ) {
// ループ処理
} finally {
// 終了処理
}
みたいな感じです。
なにかいい方法はありませんか?
C#
以外でもいいです。皆さんの意見よろしくお願いします。
P.S.
Python
だとあるみたいですね...。なんでc#
にはないんだ。