目次

自明でない_ローカル_変数_の_型を指定する

自明でないローカル変数には、型注釈を明示的に指定してください。

このルールは現在実験的であり、安定版SDKではまだ利用できません。

このルールには、クイックフィックスが利用可能です。

互換性のないルール: omit_local_variable_types

詳細

#

型が自明でない場合は、初期化されたローカル変数に型注釈を付けてください。

ローカル変数の型注釈は、型推論のリクエスト、型推論ステップの期待される結果のドキュメント化、そしてコンパイラとアナライザが、初期化式で目的の結果をもたらす型引数と注釈を見つけるというおそらく複雑なタスクを宣言的に解決できるようにするために役立ちます。

ローカル変数の型注釈は、初期化式の型を読者に知らせることもできます。これにより、読者は、指定された変数の型について既知の適切な情報(初期化式を見るだけではすぐに明らかにならない可能性があります)を使用して、後続のコード行を読み進めることができます。

式は、明らかな型を持たない場合、自明でない型を持つと見なされます。

式eは、以下の場合に自明な型を持ちます。

  • eは非コレクションリテラルです。たとえば、1、true、'Hello, $name!'などです。
  • eは、実際の型引数を持つコレクションリテラルです。たとえば、<int, bool>{}などです。
  • eは、少なくとも1つの要素が自明な型を持ち、すべての要素が同じ型を持つリストリテラルまたはセットリテラルです。たとえば、[1, 2]や{ [true, false], [] }などですが、[1, 1.5]は該当しません。
  • eは、すべてのキーと値のペアが自明な型を持つキーと値を持ち、すべてのキーが同じ型を持ち、すべての値が同じ型を持つマップリテラルです。たとえば、{ #a[] }などですが、{1: 1, 2: true}は該当しません。
  • eは、クラス部分がrawでないインスタンス作成式です。たとえば、Cが非ジェネリッククラスの場合のC(14)、またはCが1つの型引数を受け入れる場合のC(14)などですが、Cが1つ以上の型引数を受け入れる場合のC(14)は該当しません。
  • eは、ターゲットが自明な型を持つカスケードです。たとえば、1..isEven..isEvenは、1が自明な型を持つため、自明な型を持ちます。
  • eは型キャストです。たとえば、myComplexExpression as intなどです。

悪い例

dart
List<List<Ingredient>> possibleDesserts(Set<Ingredient> pantry) {
  var desserts = genericFunctionDeclaredFarAway(<num>[42], 'Something');
  for (final recipe in cookbook) {
    if (pantry.containsAll(recipe)) {
      desserts.add(recipe);
    }
  }

  return desserts;
}

const List<List<Ingredient>> cookbook = ...;

良い例

dart
List<List<Ingredient>> possibleDesserts(Set<Ingredient> pantry) {
  List<List<Ingredient>> desserts = genericFunctionDeclaredFarAway(
    <num>[42],
    'Something',
  );
  for (final List<Ingredient> recipe in cookbook) {
    if (pantry.containsAll(recipe)) {
      desserts.add(recipe);
    }
  }

  return desserts;
}

const List<List<Ingredient>> cookbook = ...;

このルールは実験的です。 評価中であり、変更または削除される可能性があります。動作に関するフィードバックをお待ちしております!主な問題は次のとおりです。https://github.com/dart-lang/linter/issues/3480.

使用方法

#

specify_nonobvious_local_variable_typesルールを有効にするには、analysis_options.yamlファイルのlinter > rulesの下にspecify_nonobvious_local_variable_typesを追加します。

analysis_options.yaml
yaml
linter:
  rules:
    - specify_nonobvious_local_variable_types