デフォルトコンストラクタ
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 10/110。
クラス内でコンストラクタを定義しない場合、Dartは自動的にデフォルトコンストラクタを提供します。これは、単にクラスのインスタンスを作成する、引数のないコンストラクタです。
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dartはデフォルトコンストラクタを提供します: Book()
Book myBook = Book();
print(myBook.title); // Unknownデフォルトコンストラクタはコード内では見えませんが、存在します。これは引数を取らず、インスタンス変数に割り当てた任意のデフォルト値でオブジェクトを初期化します。
独自のコンストラクタを定義すると、デフォルトコンストラクタは自動的に提供されなくなります。パラメータ付きのコンストラクタと並行して引数なしのコンストラクタも必要な場合は、明示的に作成する必要があります:
class Book {
String title;
int pages;
// 明示的なデフォルトコンストラクタ
Book() : title = 'Unknown', pages = 0;
// 引数付きコンストラクタ
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // デフォルトを使用
Book book2 = Book.withDetails('Dart', 300); // 引数付きを使用明示的なデフォルトコンストラクタは、初期化子リスト(コロンの後の部分)を使用して初期値を設定します。このパターンは、同じクラスからオブジェクトを作成する複数の方法を提供したい場合に便利です。
チャレンジ
簡単暗黙的および明示的なデフォルトコンストラクタの両方を実演する、シンプルな製品在庫システムを構築しましょう。
コードを整理するために、2つのファイルを作成します。
product.dart: 製品を作成するための2つの方法を提供するProductクラスを定義します。- 初期化リストを使用して
nameを'Unnamed'に、priceを0.0に初期化する明示的なデフォルトコンストラクタProduct() nameとpriceパラメータを受け取る名前付きコンストラクタProduct.withDetailsProduct: [name] - $[price]と出力するdisplay()メソッド
- 初期化リストを使用して
main.dart: 製品クラスをインポートし、2つの製品を作成します。- 1つはデフォルトコンストラクタを使用
- もう1つは
'Laptop'と999.99を指定して名前付きコンストラクタを使用
display()を呼び出します。
Product クラスには、2つのインスタンス変数が必要です。
String namedouble price
期待される出力形式:
Product: Unnamed - $0.0
Product: Laptop - $999.99チートシート
クラス内でコンストラクタが定義されていない場合、Dartは自動的にパラメータのないデフォルトコンストラクタを提供します。
class Book {
String title = 'Unknown';
int pages = 0;
}
Book myBook = Book(); // 暗黙のデフォルトコンストラクタを使用
print(myBook.title); // Unknown独自のコンストラクタを定義すると、デフォルトコンストラクタは自動的に提供されなくなります。引数なしのコンストラクタとパラメータ化されたコンストラクタの両方を持たせるには、それらを明示的に作成する必要があります。
class Book {
String title;
int pages;
// 初期化リストを使用した明示的なデフォルトコンストラクタ
Book() : title = 'Unknown', pages = 0;
// 名前付きコンストラクタ
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // デフォルトを使用
Book book2 = Book.withDetails('Dart', 300); // 名前付きコンストラクタを使用明示的なデフォルトコンストラクタは、初期値を設定するために(コロンの後の)初期化リストを使用します。
自分で試してみよう
import 'product.dart';
void main() {
// TODO: デフォルトコンストラクタを使用して product を作成する
// TODO: 'Laptop' と 999.99 を使用して名前付きコンストラクタで product を作成する
// TODO: 各 product に対して display() を呼び出す
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ