コンストラクタの基礎
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 RetrieverDartでは、パラメーターリストに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歳重要なポイント:コンストラクターを使うと、オブジェクトが作成される時点で、すべてのオブジェクトがデータで適切に初期化されるため、後から変数を手動で設定する手間が省けます。
チャレンジ
簡単書籍システムを実装するための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");
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ自分で練習してみよう: Dartオンラインコンパイラ