Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

flutter/dartでコンストラクタを使う理由

解決したいこと

flutter/dartについて何故このようにするのかが知りたい。

今、flutter/dartについて学習中です。
何故わざわざこのようにするのかがわかりません。

回答のようなもの

void main() {
  Car car = Car(doors: 4, members: 6);
  print(car.doors);
  print(car.members);
  car.drive();
}

class Car {
  //プロパティ
  int doors;
  int members;

  //コンストラクタ
  Car({int doors, int members}) {
    this.doors = doors;
    this.members = members;
  }

  //メソッド
  void drive() {
    print('I am driving');
  }
}

//出力
//4
//6
//I am driving

自分の思うプログラム

void main() {
  Car car = Car(doors: 4, members: 6);
  print(car.doors);
  print(car.members);
  car.drive();
}

class Car {
  //プロパティ
  int doors=doors;
  int members=members


//メソッド
  void drive() {
    print('I am driving');
  }
}

//出力
//4
//6
//I am driving

つまり何故コンストラクタさせる必要があるのかという質問です。
よろしくお願いします

0 likes

4Answer

  • 他の言語でも質問者さんが提案するような記法を私は見たことがないです。
  • 意味が明快ではないように思います。
  • コンストラクタは変数を定義するためだけにあるわけではありません。
  • インスタンス化のときに呼ばれる初期化のための関数です。
  • 言語によってはイニシャライザとも言います。

変数を定義するだけならば以下のシンタックスシュガーがあるので十分簡素な記法ではないでしょうか。

class Car {
  int doors;
  int members;

  Car({this.doors, this.members});
}

コンストラクタさせるという言葉遣いから察するに質問者さんはクラスについての理解があまり深くないように思えます。
Dartはインスタンス化のnewが省略されることが多く直感的でないので、クラスについて理解を深めるには別の言語のほうが向いているかもしれません。

1Like

ご質問のこの記法についてですが、

  //プロパティ
  int doors=doors;
  int members=members;

なぜ回答ではこう書かないのかという質問でしたら、 Dart の文法ではエラーになるからです。

ここで int doors=doors の右側の doorsthis.doors と解釈されます。インスタンス変数を初期化するためにインスタンス変数を使うことはできません。

なぜ Dart の文法はこう書けるように設計されていないのか(インスタンス変数初期化構文の右側でキーワード引数を参照できるようにしたらいいのになぜしないのか)という質問でしたら、推測ですが、他の文法規則と一致しないし明快でもないからでしょう。

0Like

This answer has been deleted for violation of our Terms of Service.

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌