「変更できない値」を作るとき、2つの書き方があります。
final と const の違い – どっちを使う?
final – 実行時に1回だけ決まる
final String name = '花子'; // これはもう変更できない
name = '太郎'; // ❌ エラー!
final DateTime now = DateTime.now(); // 実行したときの時刻
final int random = Random().nextInt(100); // 実行したときのランダム値
ポイント: プログラムを実行したときに値が決まる
const – コンパイル時に決まる(完全に固定)
const String appName = 'Concert Manager'; // 絶対に変わらない
const int maxStudents = 100; // 定数
const double pi = 3.14159; // 数学の定数
ポイント: プログラムを書いた時点で値が決まっている
決定的な違い:
// ✅ final は実行時の値でOK
final DateTime now = DateTime.now();
// ❌ const は実行時の値はダメ(コンパイル時に分からないから)
const DateTime now = DateTime.now(); // エラー!
// ✅ const は固定値だけ
const String title = 'アプリ名';
const int version = 1;
Flutter の Widget で使うとき:
// const を付けると、Flutterが再利用してくれる = 高速化!
const Text('タイトル')
const SizedBox(height: 20)
const Divider()
// 変数を使う場合は const 付けられない
Text('生徒数: $count') // count は変わるので const は付けられない
const Widget は再描画されない = パフォーマンス向上!
リストでも使える:
// final リスト - 中身は変更できる
final List<String> fruits = ['りんご'];
fruits.add('バナナ'); // ✅ OK
// const リスト - 中身も変更できない
const List<String> colors = ['赤', '青'];
colors.add('緑'); // ❌ エラー!
使い分けのコツ:
| 使う場面 | 使うもの |
|---|---|
| 絶対に変わらない値(アプリ名、バージョン番号) | const |
| API取得データ、現在時刻、ユーザー入力 | final |
| 変更する可能性がある | var または型指定 |
| Widget で固定の値(Text, Icon など) | const を付ける |
まとめ
一言まとめ: final は「実行したときに決まる、変更不可」、const は「最初から決まってる、完全固定」。迷ったら final を使えばOK! 😊
