[Dart / Flutter]型推論とはどんな機能か

型を明示的に宣言しなくても、自動で型を判断してくれる機能のことを「型推論」と言います。 varは変数を宣言する際に使用されるキーワードで、変数の型を自分で決めなくても、その変数の型は初期化される値によって推論されます。

型推論

var a = 10;  // aはintとして扱われる

var myList = [1, 2, 3]; // List<int>として扱われる

変数を初期化するとき、特定の値を割り当てると Dartはその値の型を見て、適切なデータ型をその変数に自動的に割り当てます。この機能により、コードの短縮と読みやすさが向上します。

どんな時に使う?

  • 変数の初期化時に明確な型がすぐにわからない場合
    プログラマが変数を初期化する際にどんなデータが格納されるか明確には決まっていない場面で特に有効です。
  • クリアなコードを目指しているとき
    関数やメソッドの戻り値など、型が明らかな場面での型注釈の省略は、コードのクリアさを保つのに役立ちます。
  • コードの可読性を向上させたい場面
    余計な型の注釈を省略することで、コードの主要な部分に注目しやすくなります。しかし、一方で過度な型推論はコードの可読性を低下させることもあるため、バランスが大切です。

final、constは型推論の機能を持っている

finalconstは、型推論の機能を持っています、そのため機能が重複するためvarを指定することはできません。

[OK] final birthday = DateTime.now();  // birthdayは、DateTime型 として推論される
[OK] final DateTime birthday = DateTime.now(); // 明示的にDateTime型付ける

[OK] final y = "hello"; // String型として推論される
[OK] final String y = "hello"; // 明示的にString型付ける

[NG] final var x = "hello"; // エラー 型推論の機能が重複するため varを指定できない 
[NG] const var x = 3.14; // エラー 型推論の機能が重複するため varを指定できない

明示的な型宣言 vs 型推論

Dartでは変数の型を明示的に宣言することも、型推論を利用することも可能です。

明示的な型宣言を使用すると、変数の型がコード上で明確になるため、ほかの開発者がコードを読むとき理解がし易くなります。一方、型推論を使用すると、コードがシンプルになりますが、型が明示的に示されていないため、場合によって分かりずらさを招く可能性があります。一般的に、明示的に型宣言が行える場合は、型宣言は行った方が良しとされています。

どんな時に使う?

  • 明示的な型宣言
    大規模なプロジェクトやチームでの開発、型の明確性が求められる場面。
  • 型推論
    小規模なプロジェクト、急速なプロトタイピング。
メリット
  • 明示的な型宣言
    型の安全性が高まり、エラーを事前にキャッチしやすくなる。
  • 型推論
    コード量が減り簡潔になる。
デメリット
  • 明示的な型宣言
    コードが若干長くなる場合がある。
  • 型推論
    型の混乱や予期しない挙動の原因となる場合がある。