Progrust Library.

// dictionary

コンソール出力.

Rustでコンソールに文字を表示するには、println!マクロを使います。渡した文字列を標準出力(stdout)に表示し、末尾に改行を加えます。改行したくない場合はprint!を使います。名前が!で終わることから分かるとおり、これらは関数ではなくマクロです。

文字列中の{}はプレースホルダで、後ろに並べたの値が順に埋め込まれます。{name}のように変数名を直接書いてキャプチャすることもできます(Rust 1.58で安定化。書けるのは変数名だけで、{item.price}のような式は書けません)。

fn main() {
    let item = "りんご";
    let price = 120;
    println!("{}{}個買います", item, 3); // 値を順に埋め込む
    println!("単価は{price}円です");       // 変数名を直接埋め込む
    print!("改行");
    print!("しない");
    println!();
}
Playgroundで開く

出力マクロの種類

マクロ 出力先 改行
println! / print! 標準出力(stdout) あり / なし
eprintln! / eprint! 標準エラー出力(stderr) あり / なし

同じ書式で、出力せずに文字列型を組み立てるformat!もあります。エラーメッセージや進捗表示には、通常の出力と分離できるeprintln!が推奨されています。

フォーマット指定

{}の中に:に続けて書式を指定できます。よく使うものを挙げます。

書き方 意味 例 → 出力
{} 人向けの表示(Display "あ"
{:?} デバッグ表示(Debug。クオート付き) "あ""あ"
{:#?} デバッグ表示の整形版 構造体 → 1フィールド1行の複数行で表示
{:.2} 小数点以下2桁(丸め) 3.141593.14
{:>8} 幅8で右寄せ(<は左寄せ) 42 42
{:04} 0埋めで幅4 420042

{そのものを表示したいときは{{と重ねてエスケープします。

補足

構造体や列挙型などの独自型をデバッグ表示する(derive Debug)

自作の構造体や列挙型は、そのままでは{:?}でも表示できません。定義に#[derive(Debug)]を付けると、デバッグ表示の実装が自動生成されます。なお、この自動生成される出力の形式は将来のRustで変わる可能性があるため、形式に依存した処理を書くのは避けます(std公式ドキュメント, Debug)。

#[derive(Debug)]
struct Item {
    name: String,
    price: u32,
}

fn main() {
    let item = Item { name: String::from("りんご"), price: 120 };
    println!("{:?}", item);  // Item { name: "りんご", price: 120 }
    println!("{:#?}", item); // 1フィールド1行で整形表示
}
Playgroundで開く
出力が表示されないときとループ内の性能

print!で改行なしの出力をした直後は、バッファリングにより画面に表示されないことがあります。すぐに表示したい場合はstd::io::Writeをインポートしてstd::io::stdout().flush()を呼びます(std公式ドキュメント, print!)。

またprintln!は呼び出しごとに標準出力のロックを取得するため、大量に出力するループでは遅くなります。std::io::stdout().lock()で一度ロックを取り、writeln!で書き込む方法が推奨されています(std公式ドキュメント, println!)。

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

backlinks 6

  1. 辞書タプル構造体
  2. 辞書ユニット様構造体
  3. 辞書構造体
  4. 動かして学ぶRustプログラミング問題集 › 第1章 コンソール出力と変数
  5. 動かして学ぶRustプログラミング問題集 › 第6章 文字列とベクタ
  6. 動かして学ぶRustプログラミング問題集 › 第9章 構造体