Dartのfinal vs const



finalとconstキーワードは多くのプログラミング言語で使用されています.
Dartでは、2つのキーワードが使用され、各キーワードの使用箇所が少し異なります.

final


finalと宣言された変数は、一度だけ初期化された後も値は変わりません.
すなわちruntimeconstantと見なすことができる.
値は、コードの最初の実行またはオブジェクトの最初の生成によって決まります.新しいオブジェクトが作成された場合、他の値が入力される場合があります.
もしそうなら、いつ利用できますか?
主な用途は,構造関数として注入されるclass変数を考慮できる.
class Person {
  final String name;
  Prerson(this.name);
}
上のクラスのように変わらない値を受け取るときに使用できます.

const


contとして宣言された定数はコンパイル時に値であり、絶対に変わらない.
その名の通り定数です.
compile timeで値が指定されているので、上記の例のように実行時に値がわかる場所では使用できません.
もしそうなら、いつ利用できますか?
固定値ハードコーディングに使用できます.
class Person {
  void walk() {
    const speed = 3;
  }
}
ただし、classでinspace fieldでconstキーワードを使用しようとすると、static fieldでのみ使用できることが示唆されます.
class内部に不変の変数を配置するには、簡単な値はfinal、Listなどの値はfinalとconstの組み合わせであってもよい.
class Person {
  // const kind = 'animal'; Error
  final kind = 'animal';
  final availableAction = const ['walk', 'talk', 'eat'];
}

の最後の部分


できるだけ可変にして、いずれにしても間違いの可能性を減らすのではないでしょうか.
頑張って使いましょう.