メインコンテンツにスキップ

specify_nonobvious_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 は、クラス部分が生のインスタンス作成式ではありません。たとえば、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/sdk/issues/58773。

互換性のないルール

#

specify_nonobvious_local_variable_types ルールは、次のルールと互換性がありません。

有効にする

#

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

代わりに linter ルールを構成するために YAML マップ構文を使用している場合は、linter > rules の下に specify_nonobvious_local_variable_types: true を追加します。

analysis_options.yaml
yaml
linter:
  rules:
    specify_nonobvious_local_variable_types: true