【Rust入門】文字列を出力する(Print!、Println!、format!)

前回まででRustのインストールとVisual Studio Codeの設定をしました。

【図解】Rustをインストールしてみる
【[図解】RustでVisualStudioCodeをエディタ、デバッガとして使う方法

今回からはRustを使ってプログラムを書いていきます。

まずはプログラムの実行結果を表示するのに必須な文字列の出力から行ってみます。

文字列を出力する方法

Rustで文字列を出力するには、Print!やPrintln!というマクロを使います。
違いは以下の通りです。

関数名 動作
Print! 改行しない
Println! 改行する

C言語を引き合いに出すと、printfという関数がありますが、使い方はそれとほぼ一緒です。Rustの場合、関数ではなくてマクロで文字列を出力するんですね。

Print!で文字列を出力する

プロジェクトを作ると、すでにHello Worldと出力するようにプログラムされています。
まずはそれを少し変更します。
「Hello, Rust!」と出力してみます。

fn main() {
	print!("Hello, Rust!");
}

Println!をPrint!に変えて文字列を変えただけです。
文字列はダブルクォートで括ります。
実行結果は

Hello, Rust!

となります。

同じようにPrintを2つ書いてみます。

fn main() {
	print!("Hello, Rust!");
	print!("How are you?")
}

実行結果は以下の通りです。

Hello, Rust!How are you?

改行が無いですよね。
改行をしたい時は、改行する場所に「¥n」を入れます。
(「¥」はVisual Studio Code上ではバックスラッシュで表示されます)

fn main() {
	print!("Hello, Rust!\n");
	print!("How are you?")
}

実行結果は以下の通りです。

Hello, Rust!
How are you?

Peintln!で文字列を出力する

Printの出力ごとに改行したい時はPrintln!を使います。

fn main() {
	println!("My name is Rust!");
	println!("I'm 20 years old?");
}

実行結果は

My name is Rust!
I’m 20 years old?

となります。

プレースホルダーを使う

次に、プレースホルダーを使って文字列の出力をしてみます。
プレースホルダーというのは、指定位置の文字を任意の数値や文字列に置き換えることです。

I am {} years old

プレースホルダーの記号は「{}」になります。
{}を文字列の中に入れておくと、そこの部分を置き換えします。
置き換えは数字でも文字列でも大丈夫です。

fn main() {
	println!("My name is {}!", "Rust");
	println!("I'm {} years old?", 20);
}
My name is Rust!
I’m 20 years old?

複数の置き換えをしたい時は、プレースホルダーを複数個配置し、置き換えする文字や数字をカンマで区切って並べます。

fn main() {
	println!("My name is {}! I'm {} years old?", "Rust", 20);
}

文字列の先頭から{}が見つかった順番に置き換えしてくれます。
実行結果は以下の通りです。

My name is Rust! I’m 20 years old?

プレースホルダーのフォーマット方法

数字の場合、フォーマット方法を指定して桁数を揃えて出力することもできます。
例えば、{:5}とすると5桁に揃えて出力してくれます。

以下がプレースホルダーのフォーマットの例です。

15を変換して出力する時
※ スペースは「_」で表記しています
{:5} ___15
{:05} 00015
{:b} 1111
{:8b} ____1111
{:08b} 00001111
{:o} 17
{:8o} ______17
{:08o} 00000017
{:.3} 15.000
{:x} f
{:8x} _______f
{:08x} 0000000f

使うのはこれくらいだと思います。
注意点として、{:.3}の書き方は小数の場合のみ適用されます。

例えば、15を8桁の16進数で表記する例は以下の通りです。

fn main() {
	print!("0x{:08x}", 15);
}
0x0000000f

もう一つ、8桁の2進数で表記してみます。

fn main() {
	println!("0b{:08b}", 15);
}
0b00001111

文字列を変数に保存する方法

Print!、Peintln!は文字列をターミナルに出力しますが、時として、出力せず文字列として変数に保存だけしたいこともあります。
そんな時はFormat!を利用します。

使い方はPrintと同じです。

fn main() {
	let s = format!("I'm {} years old", 20 );
	print!("{}", s);
}
I’m 20 years old

マクロの実行結果を変数で受け取ります。

文字列を扱う時は、Print!、Peintln!、Format!はとてもよく使うのでぜひ覚えておいてください。

スポンサーリンク