目次

Rustの勉強[パターンとマッチング その2]

ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる

お勉強

#
  • やる
  • 完全安眠できれば5.5h睡眠でもいいな

NO IMAGEパターンが使用されることのある箇所全部 - The Rust Programming Language 日本語版

  • letから

メモ

#

実はlet文を含む他の箇所でもパターンを使用してきたのです。例として、このletでの率直な変数代入を考えてください:

let x = 5;

この本を通してこのようなletを何百回も使用してきて、お気付きではなかったかもしれませんが、パターンを使用していたのです!より正式には、let文はこんな見た目をしています:

let PATTERN = EXPRESSION;
  • はぇー

これはletでパターンを使用し、タプルを分配します。

let (x, y, z) = (1, 2, 3);
  • お、これどっかで出てきたな
    • 非同期のtx?とかでか
let (x, y) = (1, 2, 3);

タプルの値のうち1つ以上を無視したかったら、「パターンで値を無視する」節で見かけるように、 _..を使用できるでしょう。

  • なーるほど
    • これで記述の納得生がでた

関数の引数もパターンにできます。

  • nanii
    • やりたくはないきがする
fn print_coordinates(&(x, y): &(i32, i32)) {
    // 現在の位置: ({}, {})
    println!("Current location: ({}, {})", x, y);
}

fn main() {
    let point = (3, 5);
    print_coordinates(&point);
}
  • んーーー?
    • これpointと型なんだ
    • 普通にTuple
    • 久々見たけど気持ち悪いなこれ
    • structでいい

クロージャの引数リストでも、関数の引数リストのようにパターンを使用することができます

  • これはやむなしかなー

パターンを使用する方法をいくつか見てきましたが、パターンを使用できる箇所全部で同じ動作をするわけではありません。

  • はぁー?
    • マジかよ

NO IMAGE論駁可能性:パターンが合致しないかどうか - The Rust Programming Language 日本語版

  • なんて読むんだ

  • 論駁不可能(ろんばくふかのう)と読むらしい

渡される可能性のあるあらゆる値に合致するパターンは、 論駁不可能なものです。文let x = 5;xは一例でしょう。xは何にでも合致し、故に合致に失敗することがあり得ないからです。

  • まぁ普通に結果わからん実装はヤバいということか

関数の引数、let文、forループは、値が合致しなかったら何も意味のあることをプログラムが実行できないので、論駁不可能なパターンしか受け付けられません。if letwhile let式は、定義により失敗する可能性を処理することを意図したものなので、論駁可能なパターンのみを受け付けます:

  • ここが区分けされてるんだな

まとめ

#
  • 新たなことはなかった

  • letだけ面白かった

  • 論駁も言葉が難しいだけな気がしている

  • 次ここ

NO IMAGE論駁可能性:パターンが合致しないかどうか - The Rust Programming Language 日本語版