【Dart】定数(finalとconst)の使い方

※本記事で使用している環境

<パソコン>
機種:MacBook Air(13inch)
OS:macOS Sonoma(ver.14.5)

<ソフトウェア>
・GoogleChrome(ver.126.0.6478.127)
・DartPad(Dart 3.4.3・Flutter 3.22.2)

目次

定数とは

定数の説明は、以下の通りです。

定数

変数とは違い、一度値を代入するとその値を変更することができない。
Dartでは、「final」と「const」の2つが使われている。

試しに、以下のコードを入力してみましょう。

name という変数に「fuga」という値を再代入しようとしています。

void main() {
  final name = "hoge";
  name = "fuga";
  print(name);
}
説明動画1

再代入しようとすると、エラーになりました。

やはり、定数は初期化で代入した値を変更することができません。

finalの記述方法

finalは、以下のように記述しましょう。

void main() {
  final name = "hoge";
  print(name);
}
説明動画2

上の場合は、型名を省略しています。

もちろん、省略せずに記述することも可能です。

void main() {
  final String name = "hoge";
  print(name);
}
説明動画3

型判別

話が変わりますが、[変数名 is 型名]と記述することで、変数の型を判別することができます。

以下の場合は、nameという変数がString型かどうかを判別しています。

String型だとtrue、それ以外の型だとfalseが出力されます。

void main() {
  final String name = "hoge";
  print(name is String);
}
説明動画4

constの記述方法

constもfinalと同じように記述します。

void main() {
  const String name = "hoge";
  print(name is String);
}
説明動画5

もちろん、再代入しようとするとコンパイルエラーが起こります。

void main() {
  const String name = "hoge";
  name = "fuga";
  print(name is String);
}
説明動画6

finalとconstの違いですが、以下のような違いがあります。

  • final は実行時にエラーが起こる
  • const はコンパイル時にエラーが起こる

よって、constの方がコンパイル時に決められているのでより高速に動作する。

constの利用例

利用法1

const の利用法として、わかりにくい数字を規定しておくというのがあります。

たとえば、constで作成した変数に円周率を入力しといて、半径をと組み合わせることで、円周を求めることができるような場合です。

void main() {
  const circumCalc = 2 * 3.14;
  print(circumCalc * 8);
}
説明動画7

利用法2

もう一つ、重要な使い方があります。

それは、List を使用する時です。

List

ほぼ、Javaにおける配列と一緒。

List の記述方法は以下通りです。

void main() {
  List<int> list1 = [1, 2, 3];
  print(list1);
}
説明動画8

定数final を先頭につけ、その後に

[list1.add(4)](←Listに4という値を付け加えるという意味)

と記述してみましょう。

void main() {
  final List<int> list1 = [1, 2, 3];
  list1.add(4);
  print(list1);
}
説明動画9

なんと、final をつけたにも関わらず、追加することができました。

次に、const で試してみましょう。

void main() {
  final List<int> list1 = [1, 2, 3];
  list1.add(4);
  print(list1);
  
  const List<int> list2 = [1, 2, 3];
  list2.add(4);
  print(list2);
}
説明動画10

コンパイルエラーが起こってしまいました。

このように、final は List の値を追加することができますが、const の場合は List の中身を一切変えることができなくなります。

ちなみに、const は以下のように、右側に記述することも可能です。

void main() {
  final List<int> list1 = [1, 2, 3];
  list1.add(4);
  print(list1);
  
  List<int> list2 = const[1, 2, 3];
  list2.add(4);
  print(list2);
}
説明動画11

const を削除することで、無事にプログラムを実行することができるようになりました。

void main() {
  final List<int> list1 = [1, 2, 3];
  list1.add(4);
  print(list1);
  
  List<int> list2 = [1, 2, 3];
  list2.add(4);
  print(list2);
}
説明動画12

おすすめ書籍

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

shimaのアバター shima ライター

自分が学んだことをメモするサイト。
ご質問やご要望、お仕事依頼がございましたらお問合せフォームよりお願いいたします。

コメント

コメントする

CAPTCHA



reCAPTCHAの認証期間が終了しました。ページを再読み込みしてください。

目次