On Wednesday, 22 July 2015 at 21:36:58 UTC, jmh530 wrote:
On Wednesday, 22 July 2015 at 20:43:04 UTC, simendsjo wrote:
When "everything" is an expressions, you can write things like
    auto a = if(e) c else d;

In D you have to write
    type a = invalid_value;
    if(e) a = c;
    else  a = d;
    assert(a != invalid_value);



I prefer this example from one of the various Rust tutorials

let foo = if x == 5 {
                "five"
          }
          else if x == 6 {
                "six"
          }
          else {
                "neither"
          }

You're basically using a conditional expression as an rvalue. You can do the same thing with a { } block.

Admittedly nowhere near as clean, but if you can bear to see the "return"s, function literals can turn any bunch of code in to an expression:

auto foo = { if(x == 5)
                         return "five";
                     else if(x == 6)
                         return "six";
                     else
                         return "neither";
                   }();

or of course there's the perhaps overly terse (brackets optional, i like them to visually group the condition with the ? ):

auto foo = (x == 5)? "five"
                   : (x == 6)? "six"
                   : "neither";

Reply via email to