Flutterで開発を始めたばかりの方が最初につまずきやすいのが、const
と final
の違い。
JavaScript(JS)に慣れていると、同じようなキーワードに見えて実はまったく性質が異なるので注意が必要です。
この記事では、Dartにおける const
/ final
の違いを丁寧に解説し、JavaScriptとの比較も交えて整理します!
✅ const
と final
の違い(Dart編)
キーワード | 再代入 | 中身変更 | 決定タイミング | 代表的な用途 |
---|---|---|---|---|
const |
❌ 不可 | ❌ 不可 | コンパイル時(コード書いた時点) | 完全な定数(ID、ラベルなど) |
final |
❌ 不可 | ✅ 可 | 実行時(アプリ起動中に決定) | 一度だけ代入したいけど動的な値(日時、引数など) |
▶️ const
の特徴
- 定数として完全に固定
- コンパイル時にすべての値が決まっている必要がある
- 中身すら変更不可(immutable)
const pi = 3.14;
const List<String> names = ['Alice', 'Bob'];
names.add('Charlie'); // ❌ エラー:変更できない
▶️ final
の特徴
- 一度だけ値を代入可能(再代入はできない)
- 実行時に初期化可能なので、柔軟性がある
- 中身は変更可能(mutable)
final now = DateTime.now(); // 実行時に決まる
final List<String> names = ['Alice', 'Bob'];
names.add('Charlie'); // ✅ OK:中身は変更できる
JSで言うところのconstがfinalに近い感じで
Flutterのconstは別の言語のconst(変更不可の厳密な定義)と同じ感じみたいですね
Flutter開発でよく使うパターン:static const
Flutterでは、アプリ内で共通の設定やIDを扱う場合に、static const
を使って定数を定義するのが一般的なようです。
class AppConfig {
static const String appName = 'MyApp';
static const int maxUsers = 100;
}
このように static const を使えば、どこからでも以下のようにアクセスできます:
print(AppConfig.appName); // → "MyApp"
厳密に管理したい値はconst
を使っていくイメージみたいですね
Flutterでのデータ管理をする場合は上記のようにClassの中にstatic constで定義していくのがいいみたいです!