今日の記事の内容
- 言語ごとの画面出力を比べてみよう
- Rustでは画面出力にマクロを使うよ
- 数値を埋め込んでみよう
はじめに
前回はDAY1ということでRustの導入を行いました。ついでに「Hello, rust!」と表示させましたね!今日は、改めて画面出力について学びます。
他の言語との画面出力の比較
他の言語とRustでの「Hello, world!」を標準出力する際の比較をします。
他の言語代表として、C言語およびPythonと比較してみましょう。
C言語では次のようになります。
#include <stdio.h>
int main(){
printf("Hello, world!");
return 0;
}
一方、Pythonでは次のようになります。
print("Hello, world!")
C言語ではprintf関数、Pythonではprint関数を呼び出しています。
これらに対して、Rustでは次のようになります。
fn main() {
println!("Hello, world!");
}
Rustではprintln!を呼び出しています。これも関数なのでしょうか。
末尾に"!"(エクスクラメーションマーク、感嘆符)がついています。これは関数ではなく、マクロであることを示しています。
つまりprintln!は普通の関数ではなく、マクロとして定義されているものなのです。
マクロとは
詳しくはこちらを参考にしてください。複雑な記述が必要な場面でも、マクロを使うことで短く記述できるようになります。Rustのマクロはプログラムをスマートにして変換するということを覚えておきましょう。
プレースホルダ
「プレースホルダってなんだろう」なんて思いながら見てください。(C言語でいう"%d"や"%s"などです。)
数値を文字列に埋め込んで画面出力する方法を確認してみましょう。
C言語では以下のようにします。
#include <stdio.h>
int main(){
int age=15;
printf("彼の年齢は%d歳です。", age);
return 0;
}
一方、Pythonでは以下のようにします。
age = 15
print("彼の年齢は{}歳です。".format(age))
C言語では「"文字列", 数値」のようにするのに対して、Pythonでは「"文字列".format(数値)」のようにします。
ここで、Rustでは以下のようにします。
fn main() {
let age = 15;
println!("彼の年齢は{}歳です。", age);
}
Rustでは、文字列に数値を埋め込んで表示する際にはprintln!マクロを利用します。第一引数に書式を指定し、それ以降で値を指定します。すると、書式の中の"{ }"(波カッコ)の部分を値に置き換えて表示します。この"{ }"を「プレースホルダ(Placeholder)」と呼びます。
また、しれっと変数の定義も行っていますね。Rustでの変数定義は「let 変数名 = 値;」のように書きます。なお、Rustでは 「値を変数に束縛する」 といいます。
ここで注意すべき点は、Rustでの変数は標準で不変です。
四則演算
次の問題を、プログラミングを用いて解いてみましょう。
【問題】 製品の材料として使う金属板を切り出す作業をしています。1枚の金属板の重さは3.2kgです。この板を8等分すると、1つの切り出しパーツの重さは何kgになるでしょうか?さらに、そのパーツを5つ使った場合、合計で何kgの重さになるでしょうか?
さて、きっとプログラミングのことで頭がいっぱいの方にはすこし難しく見えるかもしれませんが、全く難しい問題ではありません。
3.2kgを8等分ですので、3.2[kg] ÷ 8 です。また、それを5つなので、3.2[kg] ÷ 8 × 5 です。
これをRust内で計算し出力します。
fn main() {
let metal = 3.2;
println!("1つのパーツの重さは{}kg", metal / 8.0);
println!("5つのパーツの重さは{}kg", metal / 8.0 * 5.0);
}
実行してみましょう。
1つのパーツの重さは0.4kg
5つのパーツの重さは2kg
ここで、8.0や5.0のように「.0」を加えて加えて小数点以下の値まできちんと指定しなければなりません。Rustは型に厳しい言語です。
おわりに
おつかれさまでした。今回は、100DaysOfCode 二日目として、Rustの画面出力について学びました。
明日はRustとC言語でFizzBuzz問題を解きます。
ご精読、ありがとうございました。