構造体を超える構造体――Rustの構造体と列挙型を理解する基本からしっかり学ぶRust入門(7)

Rustについて基本からしっかり学んでいく本連載。第7回は、Rustの「構造体」と「列挙型」について。

» 2022年01月28日 05時00分 公開

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「基礎からしっかり学ぶRust入門」のインデックス

連載:基礎からしっかり学ぶRust入門

 Rustについて基本からしっかり学んでいく本連載。今回は、構造体と列挙型などについて紹介していきます。

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。具体的な利用方法は連載第1回を参考にしてください。


構造体とは?

 構造体は、C/C++ではおなじみの言語要素です。基本的な役割も一緒です。本連載2回目でタプルについて紹介しましたが、タプルは異なるデータ型の値を同時に持てるだけだったのに対して、構造体はそれらにも名前を付けて区別できる点が異なります。

構造体の定義

 早速、構造体の定義を見てみましょう。構造体は、以下のようにstruct文で定義します。

struct Person {         // 構造体の名前は「Person」
    name: String,       // String型のフィールド「name」
    birth: u32,         // 以下も同様
    sex: char,
    height: f64,
    weight: f64,
}
src/bin/struct1.rsのソースコード

 これは、Person構造体の定義です。中かっこ({ })の中に構造体を構成する要素(これをフィールドと呼びます)を並べていきます。

 フィールドとは、名前とデータ型の組み合わせです。これを、カンマで区切って必要なだけ並べていきます。この例では、

  • String型のname
  • u32型のbirth
  • char型のsex
  • f64型のheightとweight

を持つ構造体Personが定義されたことになります。

 最後のフィールドのあとのカンマはなくても間違いではありませんが、このように付けても構いません。あとからフィールドを加える際にカンマ漏れをなくすには、最後のフィールドにもカンマを付けるのが望ましいでしょう。

構造体のインスタンス化

 構造体を実体化することを、インスタンス化といいます。オブジェクト指向プログラミングにおいてクラスからオブジェクトを生成する「インスタンス化する」と同じ意味です。構造体のインスタンス化は、以下のように行います。ここでも、最後のフィールドのカンマが許容されます。これは構造体に限らず、Rustの共通した振る舞いです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。