Progrust Library.

// dictionary

.

式(Expression)は、評価されると値を生成するコードの単位です。1 + 2のような演算や関数呼び出しだけでなく、Rustではifmatchloop式・ブロック{}までもが値を生成する式です。The Rust Referenceは、Rustを主に式で構成される「式言語(expression language)」だと説明しています1。値を生成しないと対になる概念で、この区別がRustの文法の土台になります。

fn main() {
    let stock = 3;
    // if は式なので、評価結果をそのまま変数に束縛できます
    let message = if stock > 0 { "在庫あり" } else { "在庫切れ" };
    println!("{message}");

    // ブロックも式。末尾のセミコロンのない式がブロック全体の値になります
    let total = {
        let unit_price = 120;
        unit_price * 3
    };
    println!("合計: {total}円");
}
Playgroundで開く

式の代表例

分類 生成する値
リテラル 42, "こんにちは" 書いたとおりの値
演算子式 price * 2, a && b 演算結果
関数・メソッド呼び出し calc(), s.len() 戻り値
ブロック式 { ...; 最後の式 } 末尾の式の値(なければ()
if式・match if cond { a } else { b } 選ばれた分岐の値
loop loop { break 10; } breakに渡した値(breakしないloopは値を返さず発散)

補足

代入式が生成する値は ()

x = 5のような代入も式ですが、その評価結果は代入した値ではなくユニット型()です。そのためC言語のようにx = y = 5と連鎖させて両方に5を入れることはできません(y = 5の結果()xに入るため、xi32などの場合は型が合わずコンパイルエラーになります)。

Footnotes

  1. The Rust Reference: Statements and expressions

この辞書が使われているページ

backlinks 17

  1. 辞書for式
  2. 辞書if let式
  3. 辞書if式
  4. 辞書loop式
  5. 辞書match式
  6. 辞書return式
  7. 辞書while式
  8. 辞書コンソール出力
  9. 辞書ユニット型
  10. 辞書ループラベル
  11. 辞書関数
  12. 辞書
  13. 辞書包括パターン
  14. 動かして学ぶRustプログラミング問題集 › 第11章 列挙型とmatch式
  15. 動かして学ぶRustプログラミング問題集 › 第1章 コンソール出力と変数
  16. 動かして学ぶRustプログラミング問題集 › 第3章 制御フロー
  17. 動かして学ぶRustプログラミング問題集 › 第4章 関数