Rust

【Rust】第1章第4回:配列とタプル:データ構造の基本と操作方法

本記事では、Rustにおける配列とタプルの基本概念、使い方、そして実際のコード例を交えて解説します。これらのデータ構造を適切に使い分けることで、より効率的なプログラムを書けるようになります。

0. 記事の概要

この記事を読むメリット

  • Rustの配列とタプルの基本を理解: それぞれの特徴と用途を学べます。
  • 実践的なコードを習得: 実際のRustコードを見ながら学べます。
  • データの適切な管理方法を習得: 配列とタプルの使いどころを明確にできます。

この記事で学べること

  • Rustにおける配列の使い方
  • タプルの特徴と操作方法
  • 配列とタプルの使い分け方

1. Rustの配列の基本

1.1 配列とは?

配列は同じ型の値を固定長で保持するデータ構造です。Rustでは以下のように宣言します。

fn main() {
    let numbers: [i32; 5] = [1, 2, 3, 4, 5];
    println!("配列の要素: {:?}", numbers);
}

動作解説

このコードでは、i32型の要素を5つ持つ配列numbersを作成し、出力しています。

1.2 配列のインデックスアクセス

配列の要素にはインデックスを使用してアクセスできます。

fn main() {
    let numbers = [10, 20, 30, 40, 50];
    println!("2番目の要素: {}", numbers[1]);
}

動作解説

配列のインデックスは0から始まるため、numbers[1]は2番目の要素20を取得します。

2. Rustのタプルの基本

2.1 タプルとは?

タプルは異なる型の値を一緒に格納できるデータ構造です。

fn main() {
    let person: (String, i32, bool) = ("Alice".to_string(), 30, true);
    println!("名前: {}, 年齢: {}, 登録済み: {}", person.0, person.1, person.2);
}

動作解説

このコードでは、文字列、整数、ブール値を持つタプルpersonを作成し、各要素にアクセスしています。

2.2 タプルの分割

タプルの各要素は変数に分割して格納できます。

fn main() {
    let tuple = (500, 6.4, "Rust");
    let (x, y, z) = tuple;
    println!("x: {}, y: {}, z: {}", x, y, z);
}

動作解説

タプルtupleを3つの変数xyzに分割し、それぞれの値を取得しています。

3. 配列とタプルの使い分け

配列とタプルの違いを理解し、適切に使い分けましょう。

  • 配列: 同じ型のデータを固定長で扱う場合に適している。
  • タプル: 異なる型のデータをまとめて管理する際に有効。

4. よくあるエラーと対処法

  • 「index out of bounds」エラー: 配列の範囲外の要素にアクセスしようとすると発生。正しい範囲を確認する。
  • 「mismatched types」エラー: タプルの型と異なる型のデータを代入しようとすると発生。型を確認する。

5. まとめ

本記事では、Rustの配列とタプルの基本概念、使い方、使い分けについて解説しました。次回はRustの列挙型(Enum)とパターンマッチングについて詳しく説明します。