Rust 構文入門
Rustの構文を構成する構造や部品を理解しよう
はじめに
コードの階層構造
プログラムは、大きな構造から小さな部品へと分解できます。この関係を知ると、コードの見え方が変わります。
- 文 (Statement): 何らかの処理を行い、値を返さない命令。セミコロンで終わる。
- 式 (Expression): 評価すると1つの「値」になるかたまり。Rustでは
if
やブロック{...}
も式です。 - マクロ (Macro): コードを生成するコード。`println!` のように `!` が付くのが特徴です。
- トークン (Token): これ以上分解できない最小単位の「単語」や「記号」。
ステップ 1
部品(トークン)の役割を知る
println!("Hello, world!");
の各部分にマウスカーソルを合わせてみてください。
println!("Hello, world!");
ここに解説が表示されます。
ステップ 2
単純な構造(文とマクロ)を理解する
コードのまとまりにカーソルを合わせると、その構造がわかります。下のステップ3のツリーも連動して光ります。
println!("Hello, world!")
;
ここに解説が表示されます。
ステップ 3
コンパイラの視点 (単純な構文木)
コンパイラはコードをこの「木」の形で理解します。ツリーの各部分に触れると、ステップ2のコードも連動します。
-
文 (Statement)
-
マクロ呼び出し (MacroInvocation)
-
マクロ名: Identifier "println"
-
引数 (arguments)
- 値 (Literal): "Hello, world!"
-
-
ステップ 4
制御構文を分解する
条件分岐や繰り返しなど、より複雑な命令の構造を見てみましょう。タブで切り替えてください。
if score >= 80 { ... }
else if score >= 60 { ... }
else { ... }
ここに解説が表示されます。
-
ExprIf
- cond: ExprBinary (score >= 80)
- then_branch: Block
-
else_branch: ExprIf
- cond: ExprBinary (score >= 60)
- then_branch: Block
- else_branch: ExprBlock
-
ExprForLoop
- pat: PatIdent "i"
- expr: ExprRange (0..5)
- body: Block
match fruit {
"apple" => ... ,
"orange" => ... ,
_ => ... ,
}
"orange" => ... ,
_ => ... ,
ここに解説が表示されます。
-
ExprMatch
- expr: ExprPath "fruit"
-
arms: [...]
-
Arm
- pat: PatLit "apple"
- body: Expression {...}
-
Arm
- pat: PatLit "orange"
- body: Expression {...}
-
Arm
- pat: PatWild (_)
- body: Expression {...}
-