1. 結論
基本的に変数の値を再代入するつもりがないのであれば、finalあるいはconstを用いる必要があります。また、場合によっては、varを型に使用することができます。
final変数はビルド時に一度しか値をセットすることが出来ません。また、constはコンパイル時に値をセットするという特徴があります。(const変数も明示的なfinalです。)
2. final
- finalで宣言した変数は、再代入できないという特徴があります。
2-1. 参考コード
final name = 'Bob';
final String nickname = 'Bobby';
//再代入を試みる
name = 'Mary'; // ERROR!
3. const
- constで宣言した変数は、いずれも再代入できません。
- 定数を生成するコンストラクタを宣言することが可能で、どんな変数も定数を持つことができます。
- コンパイル時に値をセットするという特徴があります。
3-1. 参考コード
const flavor = 'cheese';
//再代入を試みる
flavor = 'spicy hot'; // ERROR!
// コンストラクタの生成
const flavors = ['cheese', 'spicy hot', 'salt&pepper'];
3-2. 注意事項
3-2-1. コンストラクタの再代入は不可
- constで生成したコンストラクタは、再代入することが不可能です。
flavors[2] = 'ketchup'; // ERROR!
3-2-1. constの中で実行できる処理について
- 型チェックやis, asを使ったキャスト、コレクション、...と...?を用いた処理に関しては、constの中でも実行することが出来ます。
//以下はOK
const Object i = 3;
const list = [i as int];
const map = {if (i is int) i: 'int'};
const set = {if (list is List<int>) ...list};
4. var
- 変数を再代入する可能性がある場合は、基本的にvarを用いるようにしましょう。
4-1. 参考コード
var flavors = ['cheese', 'spicy hot', 'salt&pepper'];
flavors[2] = 'ketchup';
print(flavors); //['cheese', 'spicy hot', 'ketchup']
5. 終わりに
・間違っている点などございましたら、コメントなどでご教示いただけると幸いです。