C# では遅延評価が使用されているとよく耳にします。したがって、のような特定のコードでは、実行せずif (true || DoExpensiveOperation()
に戻ります。true
DoExpensiveOperation()
面接試験で以下の質問を見ました。
static bool WriteIfTrue(bool argument)
{
if (argument)
{
Console.WriteLine("argument is true!");
}
return argument;
}
static void Main()
{
// 1 0 0 1
WriteIfTrue((WriteIfTrue(false) & WriteIfTrue(true)) || WriteIfTrue(true));
// 1 1 0 1
WriteIfTrue((WriteIfTrue(true) || WriteIfTrue(false)) & WriteIfTrue(true));
// 0 0 0 0
WriteIfTrue((WriteIfTrue(false) & WriteIfTrue(true)) & WriteIfTrue(false));
// 1 1 0 1
WriteIfTrue((WriteIfTrue(true) || WriteIfTrue(false)) & WriteIfTrue(true));
}
「議論は真です!」と何回出力するでしょうか。画面に?
と言う7
のが正解です。コンパイラに固執して実行すると、10
何度も出力されます! 遅延評価はどこでうまくいかなかったのですか?