質問: 時々こういうプログラムを見かけます ``` do { if (!hoge) break; fuga(); } while(false); ``` これは以下のプログラムと同じではないでしょうか ``` if (hoge) { fuga(); } ``` 2つ目の書き方は1つ目の書き方よりわかりやすいしデバグしやすいと思いますが、1つ目の書き方には利点はありますか
回答: do...while(0)の利点 ============== * 複雑な条件のif文を書きたくない、レビューしたくない。 単純な条件のif文を連ねた方がロジックを理解するのが簡単 * ブロックを抜けるとき`goto`文を使いたくない。とび先のラベルをレビューするのが面倒 以下はおまけです。質問の趣旨から外れています。 `goto`文を使わない理由 ============== 小規模なプロジェクトやプライベートでは`goto`の使用が適切な場合があると考えますが、大規模なプロジェクトでは`goto`が禁止されることが多々あります。※契約上使えない 多人数で開発する場合、メンバの平均スキルはどうしても低くなります。 低いスキルに合わせるには`goto`文の禁止もやむ無しと考えます。 多重のブロック内から一気にbreakしたいとき`goto`文を使いたくなりますが、レビューをする側から`goto`を見つけるたびに妥当性を確認するのはコスト増につながります。 背景がわからないと、「何がよいプルグラムか」を私は判断できません。