その他

【Rust】構造体(struct)について

その他
この記事は約2分で読めます。

構造体

以下はRustにおける構造体(struct)の例です。
オブジェクト指向におけるクラスのような感じになります。

構造体(struct)は関係するデータをひとまとめにして管理することができるデータ型です。

struct Server {
    address: String,
}

impl

構造体に具体的な関数を実装する場合は、implキーワードを使用します。

ここで構造体に関係する関数は2種類あります。

  1. Associated Function(関連関数)
  2. メソッド

Associated Function(関連関数)

これは構造体で定義する型に関連づけられる関数です。
引数にselfを取ることはないので、割と通常の関数に近い使い方になります。

以下は構造体からインスタンスを作成するnew関数の実装です。

struct Server {
    address: String,
}

impl Server {
    fn new(address: String) -> Server {
        Server {
            address
            // address: address の省略形
        }
    }
}

上記のコードは、以下に書き換えることができます。
ServerSelf(先頭大文字)にします。

struct Server {
    address: String,
}

impl Server {
    fn new(address: String) -> Self {
        Self {
            address
            // address: address の省略形
        }
    }
}

メソッド

メソッドはJavaなどのクラスメソッドに近いものです。
メソッドは、第1引数にselfをとります。このselfは構造体のインスタンスです。
JSならthisに相当するものです。

引数として、インスタンスそのものを受け取るということは、所有権の移動が起こる可能性があります。
所有権の移動で困る場合は、もちろん参照のみを渡すようにします。

struct Server {
    address: String,
}

impl Server {
    fn run(&self) {

    }
}