Time ago with other people I have asked to replace the keyword "invariant" with 
"immutable" to create a run-time constant. But that wasn't the best choice 
because now in my functions I am using many immutable values; writing 
"immutable" often is boring and makes code longer. This is normal D2 code:

void foo(immutable int y) {
    immutable x = 5;
    if (i > x) {
        writeln(x);
    }
    if (i > x)
        writeln(x);
}



So using "val" (abbreviation for "value") as in Scala seems better to me:

void foo(val int y) {
    val x = 5;
    if (i > x) {
        writeln(x);
    }
    if (i > x)
        writeln(x);
}


An alternative is to use Go syntax, and use the Pascal-like ":=" to denote a 
value assignment (function signature can't use := ).
Here there is another idea from Go syntax: if the "then" clause of the "if" 
uses {} then the () around the test can be omitted:

void foo(immutable int y) {
    x := 5;
    if i > x {
        writeln(x);
    }
    if (i > x)
        writeln(x);    
    if i > x { // {} become necessary if you remove ()
        writeln(x);
    }
}

Bye,
bearophile

Reply via email to