3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【備忘録】Dart/Flutterプロジェクトでの静的解析によるLintルールについて

Last updated at Posted at 2021-01-19

概要

Dart/Flutterのプロジェクトでコードの静的解析を行うには、 analysis_options.yaml を設定します。

コードの静的解析についてはこちらが参考になります。

また、Dart/FlutterでのLintルールは、こちらに一覧が記載されています。

VSCodeやAndroid Studioで、静的解析によるエラーに遭遇しても、じゃあどうしたらいいのか、すぐにわからないことが度々あるので、こちらにそれを記載していきます。

ただ、本来は各IDEで適切なpackageを設定するか、こちらのLintルール一覧で検索するのが適切な解決策かなとは思います。

ルール

avoid_function_literals_in_foreach_calls

AVOID using forEach with a function literal.
関数リテラルでforEachを使うことは避ける

ドキュメント

シーケンスの反復処理においては、for文をもちいる。

// この使い方は避けること
dogs.forEach((dog) {
  .....
});

// for文にする
for (var dog in dogs) {
  .....
}

// この様な書き方はOK
dogs.forEach(print);

avoid_init_to_null

ドキュメント
nullを使って初期化しない
Dartでは、明示的に初期化されていない変数やフィールドは、自動的にnullに初期化されます。
このため、nullを使って初期化することは冗長であり、不要です。
また、Dartには、初期化されていないメモリという概念はありません。

// nullで初期化してはいけない
int somethingNumber = null;

// こうする
int somethingNumber;

avoid_single_cascade_in_expression_statements

// こういった用法を避ける、だってカスケードの使い方として間違っている
cake..bake();

// こうする
cake..bake();

// 本来カスケードはこう使う
cake
  ..bake()
  ..putStrawberryOnTheTop()
  ..eat();

implicit_dynamic_variable

変数の型を明示的にする

// 変数(_createdAt)の型が明示的になっていない
final _createdAt = data['createdAt'];

// こんな感じにする
final _createdAt = data['createdAt'] as DateTime;

↑のようにするか、解析オプションファイルから implicit-dynamic を削除する

unnecessary_lambdas

  • ドキュメント
  • DON'T create a lambda when a tear-off will do.
    • tear-offが可能な場合は、ラムダを作成しないでください。
    • つまり、メソッドに渡された引数と同じ引数でメソッドを呼び出す関数がある場合、呼び出しをラムダでラップしないようにしましょう、ということ
    • tear-offとは、メソッドと同じパラメータを取り、それを呼び出すクロージャのこと
// ダメ、よくあるやり方
listItems.forEach((eachList) {
  print(eachList);
});

// こうする、便利
listItems.forEach(print);

curly_braces_in_flow_control_structures

  • ドキュメント
  • DO use curly braces for all flow control structures.
    • すべてのフロー制御構造に中括弧を使用してください
// if文の際、 {} を省略せずにちゃんと書く
if (todayIsApril) {
  print('Spring has come!');
} else {
  print('Please wait for Spring.');
}

// こうしちゃダメ、JSなどに慣れているとやりがちかもしれません
if (todayIsSummer)
  return print('Too hot!');

// 例外: これはOK、else文がないif文で、bodyが1行の短文の場合
if (isAutumn) return '🌰';

その他

  • 今後随時追記していきます

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?