// dictionary
式.
式(Expression)は、評価されると値を生成するコードの単位です。1 + 2のような演算や関数呼び出しだけでなく、Rustではif・match・loop式・ブロック{}までもが値を生成する式です。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に入るため、xがi32などの場合は型が合わずコンパイルエラーになります)。
Footnotes
この辞書が使われているページ
backlinks 17