本文へスキップ
BecomeCoder

Rustコース · 第1章 Rustをはじめる · レッスン5

出力の書式 ― println! マクロ

ブラウザで完結

導入

レッスン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) のように {} の数と引数の数を合わせずに書くと、コンパイラが「引数が足りない」とコンパイル時に教えてくれます。実行してからエラーになる言語との違いを感じてみましょう。

実際に動かしてみよう

下のエディタにRustを書いて「実行」を押すと、学習用シミュレータが println! の出力を表示します(本物のrustcではなく、教材の範囲を再現した軽量エンジンです)。struct・enum・match・トレイト・Vec/String/HashMap・Option/Result なども動きます。本文の例を書き換えて動かしてみましょう(所有権・借用チェッカーのコンパイルエラーは再現しないため、動きの確認用として使ってください)。

Rust — ブラウザ内で実行(学習用シミュレータ)

Rustの教材サブセットを動かす学習用シミュレータを読み込みます(本物のrustcではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。