LoginSignup
2
0

More than 3 years have passed since last update.

Rustの複合データ型

Posted at

タプル

タプルとは複数のデータを並べて保持する複合データ型です。
実物を見るのが一番わかりやすいです。

fn main() {
    let tpl = (2, 3.7, "文字列");

    println!("tplの0番目のデータ:{}", tpl.0);
    println!("tplの1番目のデータ:{}", tpl.1);
    println!("tplの2番目のデータ:{}", tpl.2);
}

実行結果

tplの0番目のデータ:2
tplの1番目のデータ:3.7
tplの2番目のデータ:文字列

複数のデータをカンマ区切りで並べ、カッコで囲うことで、タプルになります。
タプルから特定のデータを取り出すときには順番を指定しなければいけません。以下のように書きます。
タプル . 順番
順番は0から始まる点に注意してください。

複数のデータを一つの変数で扱う方法として最も簡単です。

構造体(struct)

構造体はタプルのように複数の値を並べて保持する複合データ型ですが、あらかじめ定義しないと使えません。
以下のように書きます。

// 構造体名:Point
struct Point {
    x: f32, // フィールド名:x , 型:f32
    y: f32, // フィールド名:y , 型:f32
}

fn main() {
    // Point型のデータを変数pに束縛する
    let p = Point { x: 5.9, y: 1.1 };

    // 構造体の各フィールドは名前を使って取り出すことができる
    println!("フィールド名:x、 値:{}", p.x);
    println!("フィールド名:y、 値:{}", p.y);
}

構造体の定義は以下のように書きます。
struct 構造体名 { フィールド名:型 }
フィールド名:型はカンマで区切れば何個でも書けます。また、最後のフィールドの後にカンマがあっても問題ありません。
構造体を持つ変数からフィールドの値を取り出すときは以下のように書きます。
構造体を持つ変数名 . フィールド名

The Rust Programming Languageでは推奨されていませんが、フィールドの名前を省略した構造体を定義することが出来ます。
そのような構造体をタプル構造体と呼び、以下のように書きます。

// 構造体名:Point
struct Point (
    f32, // 0番目のフィールド, 型:f32
    f32, // 1番目のフィールド, 型:f32
);

fn main() {
    // Point型のデータを変数pに束縛する
    let p = Point ( 5.9, 1.1 );

    // タプル構造体の各フィールドはタプルと同じく順番を指定する
    println!("pの0番目のデータ:{}", p.0);
    println!("pの1番目のデータ:{}", p.1);
}

波カッコ{}ではなく丸カッコ()で囲っていることと、定義の終わりにセミコロン;があることに注意してください。
使い方はタプルとほぼ一緒です。定義済みのタプルといったところでしょうか。

さらに、データを持たない構造体を定義することも出来ます。

struct some_struct;

let x = some_struct;

当然ながら、単体では使い道がありません。
しかし、「構造体の定義は必要だけどデータはいらない」という状況が存在するようです。

目次

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0