Open7

Dart / Flutter の言語仕様のインプット

nitakingnitaking

ゴールイメージ

  • 以下の言語仕様(フレームワーク仕様)をFlutterエンジニアとしてインプットする

対象

nitakingnitaking

Dart

Entry Point

すべてのappにEntry Pointとしてトップレベル関数が必要

void main() {}

print

print('Nitawaki');

Variables

  • Type Safe

    • static type check and runtime check
  • 変数宣言

    • 明示的な宣言と自動的な型宣言が可能である
String userName = 'Nitawaki';
var userName = 'Nitawaki';
nitakingnitaking

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>判定されるので型の不一致が発生、というのは理解。

nitakingnitaking

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の秩序が守られている感は感じている。

nitakingnitaking

静的型のルールのほとんどは理解するのが簡単です。以下に、あまり明白ではないルールをいくつか示します。

  • メソッドをオーバーライドする場合は、サウンドの戻り値の型を使用します。
  • メソッドをオーバーライドする場合は、サウンド パラメータ タイプを使用します。
  • 動的リストを型付きリストとして使用しないでください。
nitakingnitaking

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は実行時チェックであるので、エラーが起きるのは実行時。

nitakingnitaking

型推論(Type inference)をしても推論する情報がない場合に、 dynamic typeとなる