[解決済み] constコンストラクタは実際にどのように動作するのですか?
質問
Dartではコンストラクタを作成することが可能なことに気づきました。ドキュメントには、次のように書かれています。
const
は、コンパイル時の定数であることを示すために使用されます。
を使うとどうなるんだろうと思っていたら
const
コンストラクタを使用してオブジェクトを作成します。これは、常に同じでコンパイル時に利用可能な不変のオブジェクトのようなものでしょうか?のコンセプトはどのようなものでしょうか?
const
コンストラクタは実際に機能するのですか?どのように
コンスト
のコンストラクタとは異なります。
正規
のコンストラクタは?
解決方法は?
Const コンストラクタは、"canonicalized" インスタンスを作成します。
つまり、すべての定数表現は正規化された状態で始まり、後にこれらの定数の等価性を認識するために、この "canonicalized"シンボルが使用されます。
正準化。
複数の表現が可能なデータを、標準的な表現に変換する処理。これは、異なる表現の等価性を比較するため、異なるデータ構造の数を数えるため、繰り返しの計算を排除して様々なアルゴリズムの効率を向上させるため、あるいは意味のあるソート順序を課すために行われる。
これは、以下のようなconst式が
const Foo(1, 1)
は、仮想マシンでの比較に有用な任意の使用可能な形式を表すことができます。
VMは、このconst式で出現する順番に、値の型と引数を考慮すればよいのです。そしてもちろん、最適化のためにそれらは削減される。
同じ正規化された値を持つ定数。
var foo1 = const Foo(1, 1); // #Foo#int#1#int#1
var foo2 = const Foo(1, 1); // #Foo#int#1#int#1
正規化された値が異なる定数(シグネチャが異なるため)。
var foo3 = const Foo(1, 2); // $Foo$int$1$int$2
var foo4 = const Foo(1, 3); // $Foo$int$1$int$3
var baz1 = const Baz(const Foo(1, 1), "hello"); // $Baz$Foo$int$1$int$1$String$hello
var baz2 = const Baz(const Foo(1, 2), "hello"); // $Baz$Foo$int$1$int$2$String$hello
定数は毎回再作成されるわけではありません。コンパイル時に正規化され、特別なルックアップテーブル (ここで正規化された署名でハッシュ化されます) に格納され、そこから後で再利用されるのです。
追伸
フォーム
#Foo#int#1#int#1
これらのサンプルで使用されているものは、比較のために使用されているだけであり、Dart VMにおける実際の正規化(表現)の形ではありません。
しかし、本当の正準化はquot;standard"正準表現でなければなりません。
関連
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
-
[解決済み] Dartの「const」キーワードと「final」キーワードの違いは何ですか?
-
[解決済み] Flutter RenderBoxがレイアウトされていない
-
[解決済み] Dartのasyncとasync*の違いは何ですか?
-
[解決済み] Dartでインデックスと値でリストを列挙またはマップする
-
[解決済み] Dartの「?」ダブルクエスチョンマークとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Dartの「const」キーワードと「final」キーワードの違いは何ですか?
-
[解決済み] Flutter- wrapping text [duplicate] (フラッターテキストラッピング)。
-
[解決済み] constコンストラクタは実際にどのように動作するのですか?
-
[解決済み] Flutter RenderBoxがレイアウトされていない
-
[解決済み] Flutterでステータスバーの色を変えるには?
-
[解決済み] Dartのasyncとasync*の違いは何ですか?
-
[解決済み] Flutterはすべてのルートを削除する
-
[解決済み] テキストフィールド(オートフォーカスがtrue)を持つボトムシートをキーボードで移動させるには?
-
[解決済み] リスト firstWhere Bad state: 要素なし
-
[解決済み] FlutterでAlertDialogを作るには?