Menu
CoddyTech

コンストラクタの基礎

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

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

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

class Dog {
  late String name; // late: コンストラクタ本体で設定する
  late 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は3歳
print('${whiskers.name} is ${whiskers.age}'); // Whiskersは1歳

重要なポイント:コンストラクターを使うと、オブジェクトが作成される時点で、すべてのオブジェクトがデータで適切に初期化されるため、後から変数を手動で設定する手間が省けます。

challenge icon

チャレンジ

簡単

書籍システムを実装するためのDartファイル(book.dartとdriver.dart)が与えられています。

タスク:

  • book.dartのBookクラスに、title、author、pagesを初期化するコンストラクターを追加して完成させてください。Dartの省略構文Book(this.title, this.author, this.pages);を使用してください。
  • driver.dartで、'Harry Potter'というタイトル、'J.K. Rowling'による、400ページのBookオブジェクトを作成してください。

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

自分で試してみよう

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腕試し

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

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

自分で練習してみよう: Dartオンラインコンパイラ