【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part19 コンストラクタ

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part19 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part18 クラス

今回からコンストラクタの学習に入ります。

コンストラクタ

初めに

クラスの中に、クラスメイト同じメソッド名を定義すると「コンストラクタ」として認識されます。

class Hoge {
  // String name = null; Stringにnullを割り当てると怒られます!なんで!?
  String name = '';
  Hoge(String name) {
    this.name = name;
  }
}

void main() {
  var a = Hoge('太郎');
}

ちなみに、このコード(Hogeのコンストラクタ)は公式では「バッドコード」に指定されています!
本書でも記載されていますが、シンタックスシュガーが用意されているのでそちらを使用するのが正しい(?)ようです。

class Hoge {
  // String name = null; Stringにnullを割り当てると怒られます!なんで!?
  String name = '';
  Hoge(this.name);
}

void main() {
  var a = Hoge('太郎');  
}

・・・時代の流れなんですかね。
しっかり覚えないといけないですね。

コンストラクタを宣言していない場合は「デフォルトのコンストラクタ」が自動的に挿入されます。
コンストラクタは継承元から継承しません。

Javaと同じですね。安心です。
となると、以下のコードはコンパイルエラーとなります。

class Hoge {
  String name = '';
  // コンストラクタを明示的に実装すると「デフォルトコンストラクタ」は挿入されません。
  Hoge(this.name);
}

// このクラスはコンパイルエラーとなります。
class Fuga extends Hoge{
  // デフォルトコンストラクタがここに挿入されます。
  // このコンストラクタ内で継承元の「引数無し」のコンストラクタを呼び出そうとします。
  // しかしHogeには「引数無し」のコンストラクタは存在しません。
}

void main() {
  var a = Hoge('太郎');  
}

デフォルトコンストラクタ

引数を持たず、継承元の「引数無し」のコンストラクタを呼び出すコードのみが実装されたコンストラクタを指します。

 

最後に

コンストラクタはJavaとそん色ないくらいそっくり!
復習しているような感じではかどります。

今日はここまで!