Open7
Dart / Flutter の言語仕様のインプット
ゴールイメージ
- 以下の言語仕様(フレームワーク仕様)をFlutterエンジニアとしてインプットする
対象
-
Flutter 公式ドキュメントの読み込み
- Dart言語仕様を全体的にさらう
- Widget Catalogを全体的にさらう
Dart
Entry Point
すべてのappにEntry Pointとしてトップレベル関数が必要
void main() {}
print('Nitawaki');
Variables
-
Type Safe
- static type check and runtime check
-
変数宣言
- 明示的な宣言と自動的な型宣言が可能である
String userName = 'Nitawaki';
var userName = 'Nitawaki';
Type System
You can fix most static analysis errors by adding type annotations to generic classes. The most common generic classes are the collection types List<T> and Map<K,V>.
そうなのかい?
void main() {
final list = [];
list.add(1);
list.add('2');
printInts(list);
}
このパターンか。確かにanalyzerとしては情報が足りずに List<dynamic>
判定されるので型の不一致が発生、というのは理解。
A sound type system means you can never get into a state where an expression evaluates to a value that doesn't match the expression's static type.
健全な型システムとは、式がその式の静的型と一致しない値に評価されるような状態に陥ることがないことを意味する。
この健全な type system によってdartの秩序が守られている感は感じている。
静的型のルールのほとんどは理解するのが簡単です。以下に、あまり明白ではないルールをいくつか示します。
- メソッドをオーバーライドする場合は、サウンドの戻り値の型を使用します。
- メソッドをオーバーライドする場合は、サウンド パラメータ タイプを使用します。
- 動的リストを型付きリストとして使用しないでください。
Don't use a dynamic list as a typed list
Runtime checks
void main() {
List<Animal> animals = <Dog>[Dog()];
List<Cat> cats = animals as List<Cat>;
}
asは実行時チェックであるので、エラーが起きるのは実行時。
型推論(Type inference)をしても推論する情報がない場合に、 dynamic
typeとなる