多分Dartに限った話でもないような気がしますが、
今まで「コンパイル時定数」
「finalとconstの違い」
「静的型付け言語」
などについてよくわかっていなかったのですが、
今日いろいろ調べた結果、
(1)コンパイル時に型付けするのが静的型付け。だから実行時に違う型の値を代入しようとするとエラーとなる。
(2)コンパイル時定数はコンパイル時に「定数であること」が決まる。
Dartではconstをつけるとコンパイル時定数となる。
(3)constをつけた変数(定数)の値はすべて同一のObjectとなり、したがって同じhashcode。
constキーワードをつけると、メモリー上はコンパイル時に決定されたエイリアスのように扱われる。
↓以前の質問で頂いた回答
https://teratail.com/questions/230411
(4)finalは実行時に一度だけ値を代入できる。
現時点でこういう認識なのですが、明らかな間違いや問題がある点はありますでしょうか?
それと、constとfinalの使い分けなのですが、以前の質問で頂いた回答(上記の記述が全て正しいかどうかわかりませんが)
結局ルールとしての違いを認識していても、実際コードを書くときに、これらのルールの違いにより
constを使うとどういうメリットがあるのか、を考えないと使い所がよくわからないような気がします。
(2)と(3)は関係があるのでしょうか?
コンパイル時に定数であるから一つのオブジェクトとして扱われるのでしょうか?
そういう因果関係はなく、ただのルールなのでこの通り覚えればいい話なのでしょうか?
結局現時点での認識に基づいてまとめると、
「constをつけるとコンパイル時にメモリの割り当てが確定するので(constでない場合と比較して)実行時の速度があがる点がメリット。なので実行時に値が変わらないことが確定している変数(定数)はconstにすべき。
それに対して、実行時に一度だけ初期化する必要があり、その後は値が変わらない変数(定数)はfinalにする。」
ということなんですが、この理解で良いでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/11 03:19