構造体

構造体(struct)は、さまざまなデータ型(レコード)を組み合わせて宣言します。構造体は、さまざまな変数のリストをメモリの1つのブロックの中でひとつの名前で物理的にグループ化することで、単一のポインタでさまざまな変数にアクセスしたり、同じアドレスを返す名前で宣言された構造体にアクセスしたりできます。

オブジェクト指向プログラミング方面から来た方であればclassと見なすこともできなくはありませんが、構造体はより制約が多くなっています。

struct User {
    name string
    email string
    country string
}

fn main() {
    user := User {
        name: "V developers"
        email: "developers@vlang.io"
        country: "Canada"
    }

    println(user.country)
}

注意: 構造体は(ヒープではなく)スタックに配置されます。

構造体のインスタンスを新たに作成するときには、各フィールドをカンマ,で区切ることもできます。これはワンライナーでインスタンスを作成するときに便利です。

user := User { name: "V developers", email: "developers@vlang.io", country: "Canada" }

&プレフィックス

構造体はヒープに配置して参照することもできます。これを行うには、以下のように&プレフィックスを追加します。

変数userの型は&Userになり、Userへの参照となります。

アクセス指定子

構造体のフィールドはデフォルトで「private」(モジュールの外からアクセスできない)かつ「イミュータブル」です。これはpubmutアクセス指定子で変更できます。

mut:を指定すると「privateかつミュータブル」にできます。

pub:を指定すると「publicかつイミュータブル」(リードオンリー)にできます。

pub mut:を指定すると「public」かつ「親モジュールの中でのみミュータブル」になります。

__global:を指定すると、親モジュールの中か外かを問わず「publicかつミュータブル」になります。

命名のルール

  • structの名前は常に大文字で始めること。

  • 構造体の中の変数(フィールド)についてはSnake_Caseにする。

訳注: フィールドのスネークケース縛りは近々変更される可能性あり。

演習

  1. Userの情報を保存して表示する構造体を作成しましょう。

  2. xフィールドとyフィールドを持つPoint構造体を作成し、フィールドをそれぞれprivateとpublicにしましょう。

Last updated

Was this helpful?