5 ms·
Before: if predicate() { Some(thing) } else { None } After: predicate().then(|| thing)
by Fiahil 6y ago
Before:
if predicate() { Some(thing) } else { None }
After:
predicate().then(|| thing)
- Shadonototro 6y agoi prefer the Before one, it is clear what it does, it's branching, common, even in plain english or any latin language the second, that magic is not clear, i'll keep using the Before personally
- momothereal 6y agoIMO it depends if you're already in a chaining context. I wouldn't use it in a simple if-else branch, but it also removes the need to use if-else when you're already in a 10-function long chain. Before: if a.b().c().d().e().f() { Some(g().h().i()) } else { None } Now: a().b().c().d().e().f().then(|| g().h().i()) Even better if you have multiple boolean returns in the chain.
- csomar 6y agoThe naming can be confusing since "then" is usually used for async operations.
- steveklabnik 6y agoThat ship had already sailed in Rust https://doc.rust-lang.org/stable/std/?search=then https://doc.rust-lang.org/stable/std/?search=then
- hobofan 6y agoOption and Result already have a `and_then` in addition to the futures methods you mention, so it should just always be assumed that then/and_then have slightly different meanings depending on the context.
- deleted 6y ago[deleted]
- alfiedotwtf 6y agoI used to like explicit if/then and using match, but chaining really does reduce code. It can sometimes take a while to golf it down, but damn is it satisfying when it’s all so compact. Followed by a `cargo fmt` and it feels way more elegant than branching
- oblio 6y agoRust is awesome but I swear the language developer have no aesthetic eye. I mean, they do have one, but it definitely isn't that of Elvis (and definitely not that of Mort). https://web.archive.org/web/20080218051638/http://www.nikhilk.net/Personas.aspx https://web.archive.org/web/20080218051638/http://www.nikhil...
- trevor-e 6y agoCan you also please explain what the "||" is doing? That looks really weird to me coming from Swift and don't see it in the docs. edit: thanks all, should have known it was a lambda :D, in Swift we can omit this. My first thought seeing "||" was some type of OR logic since it's in the context of if/else
- varajelle 6y agoIt is a lambda function with no parameters. The argument of then() is a function which is evaluated only if the bool is true.
- Sharlin 6y agoRust lambdas look like this: |ar,gs| expr So `|| expr` is just a lambda function that takes no arguments and evaluates to `expr`.
- deleted 6y ago[deleted]
- laszlokorte 6y agoempty parameter list of a closure. rust: |x| x+x swift: {x in x+x} rust: || 42 swift: { 42 }
- deleted 6y ago[deleted]
- deleted 6y ago[deleted]