← Rust

LESSON / MIXED

構造体とメソッドの基礎

structによる構造体の定義、implブロックを使ったメソッドと関連関数の定義を学びます。

構造体の定義

複数の関連するデータを1つにまとめたい場合、構造体(struct)を使います。

struct Rectangle {
    width: u32,
    height: u32,
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    println!("幅: {}", rect.width);
    println!("高さ: {}", rect.height);
}

implブロックとメソッド

構造体に関連する処理は、implブロックの中に定義します。第1引数が&selfになっている関数を「メソッド」と呼び、インスタンス.メソッド名()の形で呼び出します。

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }

    fn perimeter(&self) -> u32 {
        2 * (self.width + self.height)
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    println!("面積: {}", rect.area());
    println!("周囲の長さ: {}", rect.perimeter());
}

&selfは、「このメソッドが呼び出し元のインスタンスを借用する」ことを表しています。所有権を奪わないため、メソッドを呼び出した後もrectをそのまま使い続けられます。

関連関数(associated function)

&selfを引数に取らず、構造体名に対して直接呼び出す関数を「関連関数」と呼びます。コンストラクタのような役割でよく使われ、慣習としてnewという名前が使われます。

struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn new(width: u32, height: u32) -> Rectangle {
        Rectangle { width, height }
    }

    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle::new(30, 50); // :: で関連関数を呼び出す
    println!("{}", rect.area());
}

演習:長方形構造体

コード提出フォーム

RUST

安全なサーバー側採点連携が未接続のため、現在は提出できません。

採点基盤準備中

公開テストケース

読み込み中…