はじめに
こんにちは、Flutter/Dartのfinal
とconst
の違いについて見ていきたいと思います。自分がFlutterを使う中でfinal
とconst
の使い方について混乱した経験があります。これらはどちらも変数を不変にするために使われるものですが、何がどう違うのか、どう使い分ければ良いのかが最初はよくわかりませんでした。しかし、その違いと使い方に理解が深まってきたので、紹介していきたいと思います。
finalとconstとは
まず基本的な事から見ていきます。final
とconst
は、どちらも変数を不変にします。つまり、一度値が設定されるとそれ以降その値は変更できません。
final String greeting = 'Hello, Flutter!';
const String name = 'Dart';
このように変数を宣言した場合、その後でgreeting
やname
の値を変更しようとしても、それを許さないということです。
finalとconstの違いは?
それぞれのキーワードが変数を不変にするという共通点はありますが、それぞれがどのタイミングで変数の値を固定するかが異なります。
final
キーワードは、ランタイム(つまりプログラムが動作している時)に変数を初期化します。これは、その値がユーザーの入力やデータベースの情報など、プログラムが実行されて初めて知ることができる情報に依存する場合に役立ちます。
final DateTime currentTime = DateTime.now();
一方で、const
キーワードはコンパイル時(つまりプログラムが実行される前)に変数を初期化します。これは、その値が常に一定であることが分かっている場合に使用します。
const double pi = 3.14159;
このように、final
とconst
はいずれも変数の値を不変にしますが、その初期化のタイミングが違うのです。
まとめ
自分が理解したところでは、final
とconst
の違いは「変数が初期化されるタイミング」です。final
はランタイムに、const
はコンパイル時に変数が初期化されます。
この違いを理解すれば、それぞれを適切に使い分けることができます。具体的な値が不確定な場合や、ランタイム時に初めてその値が決まる場合にはfinal
を、値が常に一定であり、それがコンパイル時に確定する場合にはconst
を使う、という感じです。
今回の記事があなたの役に立てば幸いです。
コメント