if文

  1. writeln("Washing the plate")という文は、elseのスコープ内にあるかのようにインデントされて記述されている。しかし、elseのスコープは中括弧で囲まれていないため、writeln("Eating pie")という文だけがelseのスコープ内に実際に含まれている。

    Dプログラムでは空白は重要ではないため、plate文は実際にはmain()内の独立した文であり、無条件に実行される。また、通常よりもインデントが深いため、読者を混乱させる。plate文を elseのスコープ内に必ず含める必要がある場合は、そのスコープを中括弧で囲む必要がある。

    import std.stdio;
    
    void main() {
        bool existsLemonade = true;
    
        if (existsLemonade) {
            writeln("Drinking lemonade");
            writeln("Washing the cup");
    
        } else {
            writeln("Eating pie");
            writeln("Washing the plate");
        }
    }
    D
    if.solution.1
  2. このゲームの条件については、複数の設計が考えられる。ここでは2つの例を示す。1つ目は、演習の問題から得た情報をそのまま適用したものだ。
    import std.stdio;
    
    void main() {
        write("What is the value of the die? ");
        int die;
        readf(" %s", &die);
    
        if (die == 1) {
            writeln("You won");
    
        } else if (die == 2) {
            writeln("You won");
    
        } else if (die == 3) {
            writeln("You won");
    
        } else if (die == 4) {
            writeln("I won");
    
        } else if (die == 5) {
            writeln("I won");
    
        } else if (die == 6) {
            writeln("I won");
    
        } else {
            writeln("ERROR: ", die, " is invalid");
        }
    }
    D
    if.solution.2

    残念ながら、このプログラムには多くの繰り返しがある。他の設計でも同じ結果を得ることができる。以下に1つ示す:

    import std.stdio;
    
    void main() {
        write("What is the value of the die? ");
        int die;
        readf(" %s", &die);
    
        if ((die == 1) || (die == 2) || (die == 3)) {
            writeln("You won");
    
        } else if ((die == 4) || (die == 5) || (die == 6)) {
            writeln("I won");
    
        } else {
            writeln("ERROR: ", die, " is invalid");
        }
    }
    D
    if.solution.3
  3. 前の設計はこのケースでは使用できない。プログラムに1000種類の値を入力し、それらがすべて正しく、かつ読みやすいことを期待するのは現実的ではない。そのため、サイコロの値が範囲内にあるかどうかを判断したほうがいい。
    if ((die >= 1) && (die <= 500))
    D