Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

コンストラクター

説明

Rust には、言語構成要素としてのコンストラクターはありません。代わりに、 オブジェクトを作成するには、関連関数 new を使用するのが慣例です。

#![allow(unused)]
fn main() {
/// 秒単位の時間。
///
/// # 例
///
/// ```
/// let s = Second::new(42);
/// assert_eq!(42, s.value());
/// ```
pub struct Second {
    value: u64,
}

impl Second {
    // [`Second`] の新しいインスタンスを構築します。
    // これは関連関数であり、self がないことに注意してください。
    pub fn new(value: u64) -> Self {
        Self { value }
    }

    /// 秒単位の値を返します。
    pub fn value(&self) -> u64 {
        self.value
    }
}
}

デフォルトコンストラクター

Rust は Default トレイトによるデフォルトコンストラクターをサポートしています。

#![allow(unused)]
fn main() {
/// 秒単位の時間。
///
/// # 例
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
pub struct Second {
    value: u64,
}

impl Second {
    /// 秒単位の値を返します。
    pub fn value(&self) -> u64 {
        self.value
    }
}

impl Default for Second {
    fn default() -> Self {
        Self { value: 0 }
    }
}
}

Second の場合と同様に、すべてのフィールドのすべての型が Default を実装している場合、Default を導出することもできます。

#![allow(unused)]
fn main() {
/// 秒単位の時間。
///
/// # 例
///
/// ```
/// let s = Second::default();
/// assert_eq!(0, s.value());
/// ```
#[derive(Default)]
pub struct Second {
    value: u64,
}

impl Second {
    /// 秒単位の値を返します。
    pub fn value(&self) -> u64 {
        self.value
    }
}
}

注: 型が Default と、引数を取らない new コンストラクターの両方を実装することは一般的であり、期待されています。new は Rust におけるコンストラクターの慣例であり、ユーザーはそれが存在することを期待します。そのため、基本的なコンストラクターが引数を取らなくても問題ない場合は、たとえ機能的に default と同一であっても、そうすべきです。

ヒント: Default を実装または導出する利点は、Default の実装が必要な場所でその型を使用できるようになることです。最も代表的な例は、標準ライブラリの *or_default 関数のいずれかです。

関連項目