Your 1st verbose expression, as you call it, is actually very, very readable... for the cost of 2 extra chars per same line. My opinion ? Worth the cost of 2 more chars.
On Tue, Mar 19, 2013 at 9:01 PM, Kang Seonghoon <[email protected]> wrote: > Rust does not have a ternary operator like C's `a ? b : c`, which > corresponds to Rust's `if a { b } else { c }`. I agree that ternary > operators are PITA in many cases, but for simple expressions this > seems a bit verbose: (an excerpt from the actual code) > > let nkeys = match bms.player { > 2 | 3 => if isbme { ~"14" } else { ~"10" }, > _ => if isbme { ~"7" } else { ~"5" } > }; > if haspedal { nkeys + ~"/fp" } else { nkeys } > > If we had a macro like this: > > macro_rules! iif( > ($cond:expr, $then:expr, $otherwise:expr) => > (if $cond { $then } else { $otherwise }) > ) > > the code above could be rewritten as follows: > > let nkeys = match bms.player { > 2 | 3 => iif!(isbme, ~"14", ~"10"), > _ => iif!(isbme, ~"7", ~"5") > }; > iif!(haspedal, nkeys + ~"/fp", nkeys) > > This is ultimately a matter of preference, but can be a good addition > to core if this pattern arises a lot and people will end up writing > the same macro. > > Some notes: > > * `if!` would be the better name, but `if!(x) { y } else { z }` will > be invalid then. I choose `iif!` instead because it is already used in > several languages for expression-level conditionals. > * I suggest not to implement two-argument version `iif!(x, y)` (which > is same as `iif!(x, y, ())` by the definition). We don't want this > form to be used for general blocks. > > -- > -- Kang Seonghoon | Software Engineer, iPlateia Inc. | http://mearie.org/ > -- Opinions expressed in this email do not necessarily represent the > views of my employer. > -- > _______________________________________________ > Rust-dev mailing list > [email protected] > https://mail.mozilla.org/listinfo/rust-dev > -- -Thad http://www.freebase.com/view/en/thad_guidry
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
