if let いいじゃん

Rustやっててっこれいいじゃんて思ったやつを書いとく感じの記事をたまにやっていくことにした

if let とは

代入?ができた?ら処理するみたいなやつという理解 (雑

具体例

例えばですね

enum Hoge {
    Fuga(Fuga),
    Piyo,
    // and so on
}

fn do_something() -> Option<Hoge> {}

こんなんあるとして

  • do_something()叩いてHoge::Fugaが返ってきたら中身のFuga型の値ほしい

という思いが強いときにやります

if let 知らなかった頃

中身出すのにmatchしか知らないすたんさんが書いたコードがこちら

match do_something() {
    Some(hoge) => match hoge {
        Hoge::Fuga(fuga) => do_something_with_fuga(fuga),
        _ => {}, // fugaがなかったらなんもしない
    },
    None => {}, // 同様になんもしない
}

_とかNoneとか書くのだるいですね
そこからやや進歩して

match do_something() {
    Some(Hoge::Fuga(fuga)) => do_something_with_fuga(fuga),
    _ => {},
}

でもいいんじゃん?て気付いてもややだるいです
_ がじゃまー

if let する

if let Some(Hoge::Fuga(fuga)) = do_something() {
    do_something_with_fuga(fuga)
}

いいじゃん…

書いてて気付いたこと

Rustのシンタックスハイライトないじゃん!

コメントを残す