パターンと分配束縛

Rust では、パターンマッチを使って、タプルのようなより大きな値をその構成要素に分解して束縛できます。

// 著作権 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn check_order(tuple: (i32, i32, i32)) -> bool {
    let (left, middle, right) = tuple;
    left < middle && middle < right
}

fn main() {
    let tuple = (1, 5, 3);
    println!(
        "{tuple:?}: {}",
        if check_order(tuple) { "ordered" } else { "unordered" }
    );
}
  • ここで使われているパターンは「irrefutable」です。つまり、コンパイラは = の右辺の値がそのパターンと同じ構造を持つことを静的に検証できます。
  • 変数名は、どのような値にも常にマッチする irrefutable なパターンです。そのため、let を使って単一の変数を宣言することもできます。
  • Rust は条件式の中でパターンを使うこともサポートしており、これにより等価比較と分配束縛を同時に行えます。この形式のパターンマッチについては、後でもっと詳しく説明します。
  • 上の例を編集して、パターンがマッチ対象の値と一致しないときにコンパイラ エラーが表示されるようにしてみましょう。