本文へスキップ
BecomeCoder

Rustコース · 第1章 Rustをはじめる · レッスン4

複合型 ― タプルと配列

ブラウザで完結

導入

複数の値をひとまとめにする基本の型が タプル配列 です。どちらも「サイズがコンパイル時に決まっている」——つまり要素数が固定です。この「サイズが固定」という性質は、次章から学ぶスタックの話に直結します。

説明

タプルは、異なる型をまとめて1つにできる箱です。

fn main() {
    let person: (&str, i32, f64) = ("Alice", 30, 1.65);

    // 分解(destructuring)して取り出す
    let (name, age, height) = person;
    println!("{name} は {age} 歳, 身長 {height}m");

    // .番号 でも取り出せる
    println!("名前: {}", person.0);
}
  • ("Alice", 30, 1.65) … 3つの異なる型(文字列・整数・小数)をひとまとめに。
  • let (name, age, height) = person; … タプルを一気に分解して各変数へ。
  • person.0, person.1 … 添字(0始まり)でも取り出せます。

配列は、同じ型の値を固定個数ならべたものです。

fn main() {
    let scores: [i32; 3] = [90, 80, 70];   // i32 が3個
    let zeros = [0; 5];                     // 0 を5個 → [0, 0, 0, 0, 0]

    println!("最初の点数: {}", scores[0]);   // 添字でアクセス
    println!("要素数: {}", scores.len());
}
  • [i32; 3] … 「i32 が3個」という型。要素数まで型の一部です。
  • scores[0] … 添字は0始まり。範囲外(scores[3] など)にアクセスすると、Rust は実行時にパニックして不正なメモリ読み取りを防ぎます(C言語のような「たまたま動いてしまう」危険がありません)。

配列は要素数が固定です。「後から要素を増やしたい」ときは、第8章で学ぶ Vec(可変長の配列)を使います。この違いは「スタックに置けるか/ヒープが必要か」という、メモリの本質的な話につながっていきます。

試すには

scores[5] のように範囲外にアクセスするコードを書くと、コンパイル時または実行時に index out of bounds として弾かれます。配列の境界チェックが標準で入っているのが Rust の安全性の一例です。

実際に動かしてみよう

下のエディタにRustを書いて「実行」を押すと、学習用シミュレータが println! の出力を表示します(本物のrustcではなく、教材の範囲を再現した軽量エンジンです)。struct・enum・match・トレイト・Vec/String/HashMap・Option/Result なども動きます。本文の例を書き換えて動かしてみましょう(所有権・借用チェッカーのコンパイルエラーは再現しないため、動きの確認用として使ってください)。

Rust — ブラウザ内で実行(学習用シミュレータ)

Rustの教材サブセットを動かす学習用シミュレータを読み込みます(本物のrustcではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。