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

omit_obvious_local_variable_types

実験的
修正が利用可能です

ローカル変数の明らかな型注釈を省略します。

詳細

#

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

ローカル変数は、特に最近のコードでは、関数が小さくなる傾向があるため、スコープが非常に小さいです。型を省略すると、読者の注意は、より重要な変数の名前とその初期化された値に集中します。したがって、明らかなローカル変数の型注釈は省略されるべきです。

悪い例

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

  return desserts;
}

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

良い例

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

  return desserts;
}

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

場合によっては、推論された型が変数の目的の型ではないことがあります。たとえば、後で他の型の値を代入するつもりである場合があります。また、初期化式から推論される型が明白ではなく、コードの将来の読者にとってこの型を文書化することが役立つため、明示的に型注釈を記述したい場合もあります。または、将来の依存関係の更新(近くのコード、インポート、どこであっても)によってその変数の型が静かに変更され、その変数が使用されている場所でコンパイル時エラーまたは実行時バグが発生しないように、特定の型にコミットしたい場合もあります。そのような場合は、変数に目的の型で注釈を付けてください。

良い例

dart
Widget build(BuildContext context) {
  Widget result = someGenericFunction(42) ?? Text('You won!');
  if (applyPadding) {
    result = Padding(padding: EdgeInsets.all(8.0), child: result);
  }
  return result;
}

このルールは実験的です。現在評価中であり、変更または削除される可能性があります。その動作に関するフィードバックを歓迎します!主な問題はここにあります:https://github.com/dart-lang/sdk/issues/58773。

互換性のないルール

#

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

有効にする

#

omit_obvious_local_variable_types ルールを有効にするには、analysis_options.yaml ファイルの linter > rules の下に omit_obvious_local_variable_types を追加してください。

analysis_options.yaml
yaml
linter:
  rules:
    - omit_obvious_local_variable_types

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

analysis_options.yaml
yaml
linter:
  rules:
    omit_obvious_local_variable_types: true