🤔
do-while(false)は何のためにあるのか
C++のコードで見つけたけどそれ以外でも使うそうで。
do {
bool ret = func();
if (!ret) {
break;
}
// 省略
} while(false);
なんだこれは。一瞬無限ループかと思ったが条件が false だから
一回もループせずに抜けてしまうじゃないか。何をしたいんだ
と思ってググったら「breakで抜けることができる」=「gotoや例外を使わないで済む」ということらしい。
do {
bool ret = func();
if (!ret) {
break;
}
// ←func()がtrueのときのみ処理したい
} while(false);
// 以降はfunc()がtrue/false関係なしに処理
上記の例だと
bool ret = func();
if (ret) {
// ←func()がtrueのときのみ処理したい
}
これでいいじゃん、
となるが func() に当たるのが3つもあるとネストが深くなってしまう
bool ret = func();
if (ret) {
// なんか処理
ret = func1();
if (ret) {
ret = func2();
// ←func(), func1(), func2()がtrueのときのみ処理したい
}
}
これが do-while(false)
ならすっきりする。らしい。
do {
bool ret = func();
if (!ret) {
break;
}
// なんか処理
ret = func1();
if (!ret) {
break;
}
ret = func2();
if (!ret) {
break;
}
// ←func(), func1(), func2()がtrueのときのみ処理したい
} while(false);
「今は func() に当たるのが1つしかないから無駄に見えるが、
今後の拡張性を考えて do-while(false)
にしている」というのもある。
あとはコンフリクトを避けるとか
参考
- do-while(false) を見つけたときの雑感 - Qiita <https://qiita.com/khsk/items/a2e06cd5de60b918dcfb >
- c - do-whilefalseの利点は何ですか - スタック・オーバーフロー<https://ja.stackoverflow.com/questions/1510/do-whilefalseの利点は何ですか >
Discussion