Menu
Coddy logo textTech

コンストラクタの基礎

CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 8/110。

コンストラクタは、新しいオブジェクトを作成するときに自動的に実行される特殊なメソッドです。オブジェクトのインスタンス変数を作成した瞬間に初期化します。

コンストラクタを持つクラスの例を次に示します。

class Dog {
  String name;
  String breed;

  Dog(String name, String breed) {
    this.name = name;
    this.breed = breed;
  }
}

コンストラクタはクラスと同じ名前を持ちます。オブジェクトを作成するときにパラメータが渡されます。

コンストラクタに引数を渡してオブジェクトを作成します:

Dog rex = Dog('Rex', 'German Shepherd');
Dog buddy = Dog('Buddy', 'Golden Retriever');

コンストラクタによって設定された変数にアクセスします:

print(rex.name);
print(rex.breed);
print(buddy.name);
print(buddy.breed);

出力:

Rex
German Shepherd
Buddy
Golden Retriever

Dartには、引数リストの中で直接 this.variableName を使用するコンストラクタの短縮構文も用意されています。

class Dog {
  String name;
  String breed;

  // 短縮形:引数をインスタンス変数に自動的に代入します
  Dog(this.name, this.breed);
}

どちらのバージョンも同じ結果になります。この簡略記法は、this.name = nameを手動で記述する必要をなくす、Dartの一般的な機能です。

デフォルトの引数値を追加することもできます:

class Cat {
  String name;
  int age;

  Cat(this.name, [this.age = 1]); // age のデフォルトは 1
}

Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // age のデフォルトは 1

print('${fluffy.name} is ${fluffy.age}');    // Fluffy is 3
print('${whiskers.name} is ${whiskers.age}'); // Whiskers is 1

重要なポイント:コンストラクタは、すべてのオブジェクトが生成された瞬間にデータで適切に初期化されることを保証し、後で手動で変数を設定する手間を省きます。

challenge icon

チャレンジ

簡単

本のシステムを実装するために、PHPファイル(book.dartdriver.dart)が与えられています。

あなたのタスク:

  • book.dart内のBookクラスを完成させてください。titleauthor、およびpagesを初期化するコンストラクタを追加します。Dartの簡略記法であるBook(this.title, this.author, this.pages);を使用してください。
  • driver.dartで、'Harry Potter'(著者は'J.K. Rowling'、ページ数は400)のBookオブジェクトを作成してください。

各ファイルのTODOコメントに従ってください。

チートシート

コンストラクタは、新しいオブジェクトを作成する際に自動的に実行される特別なメソッドです。作成された瞬間にオブジェクトのインスタンス変数を初期化します。

コンストラクタはクラスと同じ名前を持ちます。

class Dog {
  String name;
  String breed;

  Dog(String name, String breed) {
    this.name = name;
    this.breed = breed;
  }
}

コンストラクタに引数を渡してオブジェクトを作成します。

Dog rex = Dog('Rex', 'German Shepherd');

Dartでは、パラメータリストで直接 this.variableName を使用するコンストラクタの簡略記法が用意されています。

class Dog {
  String name;
  String breed;

  Dog(this.name, this.breed);
}

オプションの位値パラメータを使用して、デフォルトのパラメータ値を追加できます。

class Cat {
  String name;
  int age;

  Cat(this.name, [this.age = 1]); // ageはデフォルトで1になります
}

Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // ageはデフォルトで1になります

自分で試してみよう

import 'book.dart';

void main() {
  // TODO: 次の内容で Book オブジェクトを作成してください:
  // title: 'Harry Potter', author: 'J.K. Rowling', pages: 400
  Book myBook = ?;

  print("'${myBook.title}' by ${myBook.author}, ${myBook.pages} pages");
}
quiz icon腕試し

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

オブジェクト指向プログラミングのすべてのレッスン