偽りながら
今日の仕事では、同僚の1人がdo while(false)のユースケースを説明していました。彼が話していた人は、これはばかげていて、単純なifステートメントがはるかに優れていると思っていました。その後、私たちは一日の半分を無駄にして、次のようなものを書くための最良の方法について話し合いました。
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
これはcでよく見られるイディオムです。プログラムは、条件に応じて、以下の擬似コードと同じ出力を生成する必要があります。
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
したがって、入力は次のようになります。
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
出力は次のようになります。
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
これはコードゴルフなので、回答はバイトで判断されます。標準的な抜け穴は禁止されています。
はい、これは単純なものですが、創造的な答えが見つかることを願っています。単純さによって、人々が自信のない言語を使用するようになることを願っています。
return result
代わりにメソッドを使用して同じことを達成できると思われますbreak
。その後、再利用性と呼び出しコードの簡素化というボーナスも得られます。しかし、おそらく私は何かが欠けています。
goto
使用するのgoto
が悪いのでこれを行います:)
do{}while(false)
はマクロ内だけです。単純なif
ものでは十分ではありませんelse
。存在する可能性のあるs と相互作用するためです。マクロがなければ、do
and も削除できますwhile
。