【Flutter/Dart】finalとconstの区別と使い方|定数の宣言

定数
目次

final修飾子/const修飾子とは?

final修飾子またはconst修飾子を使えば、変数を定数として宣言できます。

>>【Flutter/Dart】変数の種類と使い方|型と宣言

定数の宣言

//宣言
final 型 変数名 = value;
const 型 変数名 = value;

//例
final int num1 = 1;
const int num2 = 2;

定数を宣言するには、変数の頭にfinal修飾子またはconst修飾子を付けます。

final修飾子/const修飾子の区別

final修飾子とconst修飾子のどちらも変数を定数として宣言できますが、プログラム実行中に処理をするタイミングが異なります。const修飾子はコンパイル時、final修飾子はコンパイル後に処理を実行します。

  • final:コンパイル後に処理を実行
  • const:コンパイル時に処理を実行

また、コンパイルとはプログラミングで書かれた文字列をコンピューターが理解できる形式に変換することを呼びます。それでは、コンパイル時/コンパイル後に定数を宣言すると何が変わるのか例を使いながら解説していきます。

finalの場合(コンパイル後に処理を実行)

//直接値を代入
final String name = 'Alex';

//別の変数を代入
String greeting = 'Hello World';
final String greetingFinal = greeting;

finalで定数を宣言する場合、別の変数の値を代入できます。

constの場合(コンパイル時に処理を実行)

//直接値を代入
const String name = 'Alex';

//別の変数を代入
String greeting = 'Hello World';
const String greetingConst = greeting; //コンパイルエラー

constで定数を宣言する場合、直接値を代入できますが、別の変数を代入できません。なぜならコンパイル時ではコンピューターがまだ他の変数を把握しておらずコンパイルエラーになってしまうからです。

つまり、このコードの場合constを使って定数「greetingConst」に別の変数「greeting」を代入しようとしても、まだコンピューターが「greeting」を変数として把握していないためコンパイルエラーが起きてしまいます。

参考

よかったらシェアしてね!
目次
閉じる