if文
writeln("Washing the plate")
という文は、else
のスコープ内にあるかのようにインデントされて記述されている。しかし、else
のスコープは中括弧で囲まれていないため、writeln("Eating pie")
という文だけがelse
のスコープ内に実際に含まれている。Dプログラムでは空白は重要ではないため、plate文は実際には
main()
内の独立した文であり、無条件に実行される。また、通常よりもインデントが深いため、読者を混乱させる。plate文をelse
のスコープ内に必ず含める必要がある場合は、そのスコープを中括弧で囲む必要がある。- このゲームの条件については、複数の設計が考えられる。ここでは2つの例を示す。1つ目は、演習の問題から得た情報をそのまま適用したものだ。
残念ながら、このプログラムには多くの繰り返しがある。他の設計でも同じ結果を得ることができる。以下に1つ示す:
- 前の設計はこのケースでは使用できない。プログラムに1000種類の値を入力し、それらがすべて正しく、かつ読みやすいことを期待するのは現実的ではない。そのため、サイコロの値が範囲内にあるかどうかを判断したほうがいい。