質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

768閲覧

Dart : finalとconstの違い

moriman

総合スコア615

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

1クリップ

投稿2020/09/11 01:04

多分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にする。」
ということなんですが、この理解で良いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ある変数が変更可能であれば、
constもfinalもつけない。

コンパイル時に値を特定/指定できるならば、const(当然、その値は変更しない)
コンパイル時に値を決めれないが、実行時に設定するなら、final

の3択という理解で良いのではないでしょうか。

ちなみに、実行速度とかメモリ節約は基本考えなくてよくて、用途をきちんと押さえておけば良いと思います。

投稿2020/09/11 03:15

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2020/09/11 03:19

なるほどですね。 その場合わけではっきりしますよね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問