[C++] do~while (false)が好き
関数内で、do~while (false)を使うのが好き。
使う人は当たり前のように使ってるけど、この書き方が嫌いな人も結構いるっぽい。
メリットは、
- if文の多用や、それによるインデントの数を防げる
- 終了時の処理が分散しない(途中returnを無くせる)
ってとこだと思う。
実際↓こんな感じになる。
/**
* なんかの初期化関数
*
* @param[in] a_nIn 入力値
*
* @return 処理結果
* @retval true 成功
* @retval false 失敗
*/
bool Init(int a_nIn)
{
bool bRet = true; // 戻り値
char* pszError = NULL; // エラーメッセージ
do
{
// パラメータチェック
if (a_nIn < 0)
{
pszError = "パラメータエラー";
bRet = false;
break;
}
// オブジェクトの生成
if (! CreateObject())
{
pszError = "オブジェクト生成エラー";
bRet = false;
break;
}
// オブジェクト2の生成
if (! CreateObject2())
{
pszError = "オブジェクト2生成エラー";
bRet = false;
break;
}
}
while (false);
// エラーメッセージ表示
if (! bRet)
{
OutputErrorMessage(pszError);
}
// ログ出力とか?必要なら
OutputLog(__FUNCTION__);
return bRet;
}
途中returnあると、終了時の処理が分散しちゃって見にくいし、管理しにくい。終了処理は一箇所にまとまってる方がいいかなと。
ちなみに、while文使って、
while (true)
{
// パラメータチェック
if (a_nIn < 0)
{
pszError = "パラメータエラー";
bRet = false;
break;
}
…(略)…
break;
}
でもいいかと思ったけど、会社の人と話したときに、
「breakは忘れるから怖い」
って言ってた。while(true)でbreak忘れて無限ループになるのが怖いと。
do~while文だったら、最後のwhile忘れたらコンパイルがそもそもできないし、その最後のwhileにfalseじゃなくて敢えてtrueを指定するって間違いは無いと思う。
でも、while文のときは、while(true)の中で最後にbreak忘れても、コンパイル通っちゃう。そのbreakだけ忘れるとかだったらやっちゃいそう。
あ、goto文は存在しないことにしときます。
トラックバック(0)
このブログ記事を参照しているブログ一覧: [C++] do~while (false)が好き
このブログ記事に対するトラックバックURL: http://blog.1122soft.com/mt4/mt-tb.cgi/54







コメントする