構造体
以下はRustにおける構造体(struct)の例です。
オブジェクト指向におけるクラスのような感じになります。
構造体(struct)は関係するデータをひとまとめにして管理することができるデータ型です。
struct Server {
address: String,
}
impl
構造体に具体的な関数を実装する場合は、impl
キーワードを使用します。
ここで構造体に関係する関数は2種類あります。
- Associated Function(関連関数)
- メソッド
Associated Function(関連関数)
これは構造体で定義する型に関連づけられる関数です。
引数にself
を取ることはないので、割と通常の関数に近い使い方になります。
以下は構造体からインスタンスを作成するnew
関数の実装です。
struct Server {
address: String,
}
impl Server {
fn new(address: String) -> Server {
Server {
address
// address: address の省略形
}
}
}
上記のコードは、以下に書き換えることができます。Server
をSelf
(先頭大文字)にします。
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) {
}
}