Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
println!() / print!() / format!() / eprintln!()
Rustには出力と文字列フォーマット用のマクロとして『println!()』『print!()』『format!()』『eprintln!()』が用意されています。これらは書式文字列でフォーマット指定子を使った柔軟な出力が可能です。
構文
// 標準出力に改行付きで出力します。
println!("text");
println!("{}", value);
println!("{:?}", value); // Debug フォーマット
println!("{:#?}", value); // Pretty Debug フォーマット
// 標準出力に改行なしで出力します。
print!("{}", value);
// フォーマット済み String を生成します(出力しません)。
let s = format!("x = {}", x);
// 標準エラー出力に改行付きで出力します。
eprintln!("Error: {}", msg);
eprint!("{}", msg); // 標準エラー出力に改行なし
// 主なフォーマット指定子
println!("{:5}", x); // 幅5(右揃え)
println!("{:<5}", x); // 幅5(左揃え)
println!("{:05}", x); // 幅5・ゼロ埋め
println!("{:.2}", f); // 小数点以下2桁
println!("{:8.2}", f); // 幅8・小数点以下2桁
println!("{:b}", x); // 2進数
println!("{:o}", x); // 8進数
println!("{:x}", x); // 16進数(小文字)
println!("{:X}", x); // 16進数(大文字)
println!("{:e}", f); // 指数表記(小文字)
マクロ一覧
| マクロ | 概要 |
|---|---|
| println!() | 標準出力に改行付きで出力します。 |
| print!() | 標準出力に改行なしで出力します。 |
| format!() | フォーマット済みの String を生成します(出力しません)。 |
| eprintln!() | 標準エラー出力(stderr)に改行付きで出力します。 |
| eprint!() | 標準エラー出力に改行なしで出力します。 |
| {} | Display トレイトを使ったフォーマットです。 |
| {:?} | Debug トレイトを使ったフォーマットです。 |
| {:#?} | Debug トレイトを使った整形出力(Pretty print)です。 |
| {:b} {:o} {:x} | それぞれ2進数・8進数・16進数で出力します。 |
| {:.2} | 小数点以下の桁数を指定します。 |
サンプルコード
fn main() {
// 基本的な出力
println!("Hello, Rust!");
println!("x = {}, y = {}", 42, 3.14);
// 名前付き引数
println!("{name}は{age}歳です", name = "Alice", age = 30);
// 変数のキャプチャ(Rust 1.58以降)
let x = 100;
println!("x = {x}");
// Debug / Pretty Debug フォーマット
let v = vec![1, 2, 3];
println!("{:?}", v); // [1, 2, 3]
println!("{:#?}", v); // 複数行の整形出力
// 数値のフォーマット指定子
println!("{:8}", 42); // " 42"(幅8、右揃え)
println!("{:<8}", 42); // "42 "(幅8、左揃え)
println!("{:^8}", 42); // " 42 "(幅8、中央揃え)
println!("{:08}", 42); // "00000042"(幅8、ゼロ埋め)
println!("{:.3}", 3.14159); // "3.142"(小数点以下3桁)
println!("{:8.2}", 3.14); // " 3.14"(幅8、小数点以下2桁)
// 進数表示
let n = 255u32;
println!("10進数: {n}"); // 255
println!("2進数: {:b}", n); // 11111111
println!("8進数: {:o}", n); // 377
println!("16進数: {:x}", n); // ff
println!("16進数大: {:X}", n); // FF
println!("プレフィックス付き: {:#x}", n); // 0xff
// format!() で String を生成します。
let s = format!("{:>10}", "rust");
println!("右揃え: '{s}'"); // ' rust'
// eprintln!() でエラー出力します(stderr に書き込みます)。
eprintln!("警告: これはエラー出力です");
// print!() と flush(改行なし出力の後に flush が必要な場合があります)
use std::io::Write;
print!("入力してください: ");
std::io::stdout().flush().unwrap();
}
概要
Rustの出力マクロは書式文字列を使ってフォーマットを指定します。『{}』は『Display』トレイト、『{:?}』は『Debug』トレイトを呼び出します。自作の型で『{:?}』を使うには『#[derive(Debug)]』を付けるだけです。
『format!()』マクロは出力を行わず『String』を返します。ログメッセージの組み立てや複数の値を文字列に変換する際に便利です。
『print!()』使用後に改行なしで即座に表示したい場合は『std::io::stdout().flush()』が必要です(バッファリングされているため)。Display/Debugトレイトの実装についてはDisplay トレイト / Debug トレイトを参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。