3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter/Dart】定数final・const・varの違い

Last updated at Posted at 2023-02-20

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. 終わりに

・間違っている点などございましたら、コメントなどでご教示いただけると幸いです。

6. 参考ページ

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?