導入
レッスン1で println! の末尾に ! が付くのは「マクロだから」と説明しました。ここでは println! を使いこなす書式を覚えつつ、「マクロとは何か」を軽く押さえます。
説明
println! の第1引数は書式文字列で、{} の場所に値が差し込まれます。
fn main() {
let name = "Rust";
let year = 2015;
// {} に順番に差し込む
println!("{} は {} 年に登場", name, year);
// {変数名} で直接埋め込む(新しめの書き方・読みやすい)
println!("{name} は {year} 年に登場");
// {:?} はデバッグ表示。中身の構造を確認したいとき
let point = (3, 4);
println!("point = {:?}", point);
// 桁や幅の指定
println!("{:>8}", "右寄せ"); // 幅8で右寄せ
println!("{:.2}", 3.14159); // 小数点以下2桁 → 3.14
}
| 書式 | 意味 |
|---|---|
{} | 通常の表示(Display) |
{:?} | デバッグ表示(Debug)。タプルや構造体の中身を見る |
{:#?} | デバッグ表示を見やすく改行 |
{:.2} | 小数点以下2桁 |
{:>8} / {:<8} | 幅8で右寄せ/左寄せ |
マクロ(! が付くもの)は「コンパイル時にコードへ展開される仕組み」です。println! が関数ではなくマクロなのは、引数の個数を可変にしたり、{} の数と引数の数が合っているかをコンパイル時にチェックしたりするため。おかげで書式ミスを実行前に発見できます。vec!(第8章)や panic! など、Rust ではマクロがよく登場します。
試すには
println!("{} {}", name) のように {} の数と引数の数を合わせずに書くと、コンパイラが「引数が足りない」とコンパイル時に教えてくれます。実行してからエラーになる言語との違いを感じてみましょう。