Menu
Coddy logo textTech

実装ブロック入門

CoddyのRustジャーニー「Object Oriented Programming」セクションの一部 — レッスン 1/61。

Rustでは、構造体(struct)は型が保持するデータを定義しますが、その型が何をできるかは定義しません。構造体に振る舞いを持たせるには、implキーワードを使用した実装ブロックを使用します。

実装ブロック(implementation block)は、関数(メソッドと呼ばれます)を特定の構造体に結び付けます。基本的な構造は次の通りです。

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

impl Dog ブロックは、その中のすべてが Dog 構造体に属していることを Rust に伝えます。この分離により、データ定義をクリーンに保ちながら、実装ブロックに必要なだけメソッドを追加することができます。

メソッドを呼び出すには、インスタンスに対してドット記法を使用します。

fn main() {
    let my_dog = Dog {
        name: String::from("Rex"),
        age: 3,
    };
    
    my_dog.bark(); // 出力: Rex says woof!
}

データ(struct)を振る舞い(implブロック)から分離するこのパターンは、Rustコードを整理する上での基本です。今後のレッスンでは、上記の例にある&selfパラメータを通じて、メソッドがどのように構造体のデータにアクセスするかを見ていきます。

challenge icon

チャレンジ

簡単

name (String) と lives (u8) の2つのフィールドを持つ Cat 構造体を作成してください。

&self を取り、猫の名前の後に " says meow!" を付けて出力する meow というメソッドを持つ Cat の実装ブロックを追加してください。

2つの入力を受け取ります:

  • 1行目:猫の名前 (String)
  • 2行目:命の数 (u8)

提供された値を使用して Cat インスタンスを作成し、そのインスタンスで meow メソッドを呼び出してください。

期待される出力形式:

{name} says meow!

チートシート

実装ブロックは、implキーワードを使用してメソッドを構造体に結び付けます:

struct Dog {
    name: String,
    age: u8,
}

impl Dog {
    fn bark(&self) {
        println!("{} says woof!", self.name);
    }
}

implブロックは、データ定義(構造体)を振る舞い(メソッド)から分離します。メソッドはドット記法を使用して呼び出されます:

let my_dog = Dog {
    name: String::from("Rex"),
    age: 3,
};

my_dog.bark(); // 出力: Rex says woof!

メソッドは、構造体のデータにアクセスするために&selfパラメータを使用します。

自分で試してみよう

use std::io;

// TODO: 'name' (String) と 'lives' (u8) フィールドを持つ Cat 構造体を定義する


// TODO: 'meow' メソッドを持つ Cat の実装ブロックを追加する


fn main() {
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    let mut lives_input = String::new();
    io::stdin().read_line(&mut lives_input).expect("Failed to read line");
    let lives: u8 = lives_input.trim().parse().expect("Failed to parse lives");
    
    // TODO: Cat インスタンスを作成し、meow メソッドを呼び出す
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Object Oriented Programmingのすべてのレッスン