基礎
目次
dynamic型付け
- コンパイル時に型チェックを行わない特殊な型
- メソッド呼び出しやプロパティ参照もコンパイル時にはチェックされず、実行時に解決される
- 安全性が低い(コンパイル時にエラーが出ない)ため、型安全にしたい場合は
Object?
や具体的な型を使うことが推奨される
基本構文
- 宣言:
dynamic var = value
- 関数の戻り値:
dynamic func() {return 任意の型;}
- リスト・マップなどのジェネリック型にも使える
List<dynamic> items = [1, "two", true];
Map<String, dynamic> map = {"id": 1, "name": "Alice"}
変換修飾子
メモリ領域
- 静的領域(static area)
- プログラム起動時に確保され、終了まで保持される
- クラスの情報、staticメンバなどが格納される
- ヒープ(heap)
- 大きなメモリ領域
- インスタンスや動的なデータを保存
- スタック(stack)
- 小さな高速メモリ
- 関数の実行時に確保、終了時に解放
変換修飾子の種類
const
- 絶対に変わらない値(定数)
- コンパイル時に値が確定され、静的領域に保存される
- 実行中に変更することはできず、実行時に決まる値は持てない
- 同じ値の
const
はメモリを再利用するため、メモリ効率も良い
final
- 一度だけ値を設定できる変数
- 動的に決まる一度きりの値
- プログラム実行時に決定され、初期化された後は変更できない
- メモリ領域はヒープかスタック
late
- 遅延初期化
- 変数の初期化を後回しにすることで、無駄なメモリを節約できる
- 変数の宣言時に初期化しなくてもコンパイラが警告を出さず、後で実際に初期化することができる
- 初期化されるまでメモリを消費しないため、メモリ節約に使う
static
- クラス全体で共有される変数
- インスタンスごとではなくクラス単位でメモリが確保される
- クラスのメタデータがメモリにロードされる対ミグで1つだけ初期化され、すべてのインスタンスで共有されるため、同じクラスのインスタンスがあっても1つだけ使用され、メモリの効率が良い
- メモリ領域は静的領域