1. 概要
今回はRustのタプル型、配列型について学んでいきたいと思います。
2. タプル型
タプルとは、複巣の型の要素を持てる複合型です。
タプル型の変数を定義するときは、「let 変数名 = (値1, 値2, …)」と書きます。タプル型の変数にアクセスする場合は、「変数.0」と書きます。配列のように、「変数[i]」といった書き方はできないので、for文などで使用することはできないので注意が必要です。
fn main() {
// タプルを作成
let tuple = ("リンゴ", 5, 100);
// タプルを出力
println!("{:?}", tuple);
// 各要素へアクセス
println!("--- 各要素へアクセス ---");
println!("商品:{}", tuple.0);
println!("個数:{}", tuple.1);
println!("値段:{}", tuple.2);
// 分配
println!("--- 分配 ---");
let (商品, 個数, 値段) = tuple;
println!("商品 = {}", 商品);
println!("個数 = {}", 個数);
println!("値段 = {}", 値段);
}
実行します。
cargo run
結果
Compiling hello_rust v0.1.0 (/Users/ryoutaookawa/hello_rust)
Finished dev [unoptimized + debuginfo] target(s) in 0.47s
Running `target/debug/hello_rust`
("リンゴ", 5, 100)
--- 各要素へアクセス ---
商品:リンゴ
個数:5
値段:100
--- 分配 ---
商品 = リンゴ
個数 = 5
値段 = 100
問題なく実行できました。各要素へのアクセスは難しくなく簡単でした。ちなみにRustは変数名に日本語や韓国語を使用することもできます。
タプルを出力するとき、「println!(“{:?}”)」と書いています。「{:?}」はデバッグ出力のフォーマットです。次のプログラムのように、デバッグ出力のフォーマットを指定せずにタプルを出力すると、どうなるでしょうか。
fn main() {
// タプルを作成
let tuple = ("リンゴ", 5, 100);
// タプルを出力
println!("{}", tuple);
}
実行します。
cargo run
結果
Compiling hello_rust v0.1.0 (<作業ディレクトリ>/hello_rust)
error[E0277]: `(&str, {integer}, {integer})` doesn't implement `std::fmt::Display`
--> src/main.rs:6:20
|
6 | println!("{}", tuple);
| ^^^^^ `(&str, {integer}, {integer})` cannot be formatted with the default formatter
|
= help: the trait `std::fmt::Display` is not implemented for `(&str, {integer}, {integer})`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
= note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)
For more information about this error, try `rustc --explain E0277`.
error: could not compile `hello_rust` due to previous error
デフォルトのフォーマットではダメだと言われました。そして「{:?}」または「{:#?}」のフォーマットを使うようにと言われてます。
3. 配列型
配列もタプルと同様に複合型です。タプルと異なる点は、全要素が同じ型でなければいけません。また、Rustの配列は、固定長なので、宣言後にサイズを伸ばしたり、縮めたりすることはできません。
定義する際は、「let 変数名 = [値1, 値2, …]」と書きます。
fn main() {
// 配列を作成
let array = [1, 2, 3, 4, 5];
// 配列を出力
println!("{:?}", array);
println!("--- 要素へアクセス ---");
println!("1番目:{}", array[0]);
println!("2番目:{}", array[1]);
println!("3番目:{}", array[2]);
println!("4番目:{}", array[3]);
println!("5番目:{}", array[4]);
println!("--- for文で各要素を出力 ---");
for i in array {
println!("{}番目 = {}", i, i);
}
// 配列の長さを出力
println!("--- 配列の長さ ---");
println!("length = {}", array.len());
}
実行します。
cargo run
結果
Compiling hello_rust v0.1.0 (<作業ディレクトリ>/hello_rust)
Finished dev [unoptimized + debuginfo] target(s) in 0.22s
Running `target/debug/hello_rust`
[1, 2, 3, 4, 5]
--- 要素へアクセス ---
1番目:1
2番目:2
3番目:3
4番目:4
5番目:5
--- for文で各要素を出力 ---
1番目 = 1
2番目 = 2
3番目 = 3
4番目 = 4
5番目 = 5
--- 配列の長さ ---
length = 5
配列の使い方は、他の言語とあまり変わらないです。Rust以外の言語を使ったことのあるプログラマーであればすぐわかると思います。
4. 文字列フォーマット
print!マクロ、println!マクロ、format!マクロで使用できるフォーマットです。
書式 | 説明 |
---|---|
{:<n} | n桁で左寄せ |
{:>n} | n桁で右寄せ |
{:^n} | n桁で中央寄せ |
{:<0n} | n桁で左寄せ(0埋め) |
{:>0n} | n桁で右寄せ(0埋め) |
{:b} | 2進数 |
{:0nb} | 2真数でn桁0埋め |
{:o} | 8進数 |
{:x} | 16進数 |
{:0nx} | 16進数でn桁0埋め |
{:.n} | 小数点以下をn桁 |
{:e} | 指数表現 |
{:?} | デバッグ出力 |
{:#?} | デバッグ出力(成形) |
{{ | { を出力 |
}} | } を出力 |
{:p} | ポインタ |
5. まとめ
今回は、タプルと配列についてやりました。他の言語での使い方とそんなに変わらないので分かりやすいです。あと、文字列フォーマットはたくさんあるので、用途によっていろいろできるのですごく便利でした。
投稿者プロフィール
最新の投稿
【Remix】2024年3月23日【Remix】 環境構築手順
【Rust】2022年11月27日【Rust】Unsafe Rust
【Rust】2022年11月27日【Rust】列挙型
【Rust】2022年10月22日【Rust】構造体