This is a really simple silly thing I just realized, but I noticed I have a lot code that looks something like this:

fn foo() -> Result<(), Error> {
    // do something
}

fn bar() -> Option<()> {
    let Ok(f) = foo() else {
        return None;
    };
}

I hated that if-statement. I realized today that I could simplify to:

fn bar() -> Option<()> {
    let f = foo().ok()?;
}

And that cleaned up my code a lot. It’s a tiny thing, but when it’s okay to discard the error from the result, makes such a big difference when you have a lot of them!

  • steventrouble@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    This is one of my favorite tricks!

    Things like this make it possible to do a programming puzzle I like, where you try to write an entire program in just 1-3 line functions.