見出し画像

Rust フォーマットしてプリントする「std::fmt」の使い方と注意点

Rustのstd::fmtモジュールは、フォーマット可能なトレイトを提供しており、これを使ってカスタムタイプの出力フォーマットを定義することができます。

print!、println!、format!などのマクロと組み合わせて使用されることが多いです。


主要なフォーマットトレイト

Display:ユーザーに向けた出力に適したフォーマット。{}プレースホルダーで使用されます。
Debug:デバッグ出力に適したフォーマット。{:?}や{:#?}で使うことが多いです。
Octal:8進数のフォーマット
LowerHex、UpperHex:16進数フォーマット(小文字と大文字)
Binary:二進数フォーマット
Pointer:ポインタのアドレス表示


基本的な使い方

use std::fmt;

struct Point {
    x: i32,
    y: i32,
}

impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "({}, {})", self.x, self.y)
    }
}

fn main() {
    let origin = Point { x: 0, y: 0 };
    println!("The origin is: {}", origin);
}

上記コードではPoint構造体にDisplayトレイトを実装して、println!マクロで使えるようにしています。

impl fmt::Display for Point: Point構造体に対してDisplayトレイトを実装しています。これにより、Point型のインスタンスをユーザーに親しみやすい形で出力することが可能になります。


注意点

エラー処理

fmt::Resultはwrite!マクロからの出力を処理する際に使用されます。
この関数がErrを返すと、フォーマット処理が失敗したことを意味します。


パフォーマンス

大量のデータをフォーマットする際や高頻度でログを出力する場合、フォーマット操作はパフォーマンスに影響を与える可能性があります。


可読性と保守性

カスタム型にDisplayやDebugトレイトを実装する際は、その実装が他の開発者にとって明瞭であることを保証することが必要です。また、将来的に構造体が変更された場合に備えて、関連するトレイト実装も更新する必要があります。


Rustをもっと詳しくなりたい方に

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!

個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。

Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。


基礎から学ぶRustプログラミング入門

本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています

この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?