avoid_futureor_void
結果の型として 'FutureOr' を使用しないでください。
このルールは現在実験的であり、安定版SDKではまだ利用できません。
詳細
#避けるべきこと:結果の型としてFutureOr<void>
を使用すること。この型は、結果がFuture<void>
であるか、結果を破棄する必要がある(void
の場合)ことをエンコードしているように見えるため、問題があります。ただし、どちらの場合であるかを安全に検出する方法はありません(型void
の式は、あらゆる型のfutureを含む、あらゆるオブジェクトを評価できるためです)。
また、「このオブジェクトは無視してください。また、futureの可能性があるので見てください」のような意味を持つ型を持つことは、概念的に不健全です。
型FutureOr<void>
の反変的な出現(例:仮パラメータの型)は例外とされ、これらの出現に対して警告は発行されません。この例外の理由は、型が結果を記述するのではなく、他者によって提供される値の制約を記述するためです。同様に、型エイリアス宣言も例外とされます。これは、反変的な位置(例:仮パラメータの型)で使用される可能性があるためです。したがって、型エイリアス宣言では、型パラメータの境界のみがチェックされます。
型FutureOr<void>
の代わりに、多くの場合役立つのはFuture<void>?
です。この型は、結果がFuture<void>
であるかnullであるかをエンコードし、両方の型を持つオブジェクトが存在しないため、実行時にあいまいさはありません。
後者はすべての型のスーパータイプであり、前者はそうでないため、常に型Future<void>?
を型FutureOr<void>
の代替として使用できるとは限りません。この場合、FutureOr<void>
を型void
に置き換えることが有効な解決策となる場合があります。
悪い例
FutureOr<void> m() {...}
良い例
Future<void>? m() {...}
このルールは実験的です。 評価中であり、変更または削除される可能性があります。動作に関するフィードバックは大歓迎です!主な問題は次のとおりです。https://github.com/dart-lang/linter/issues/4622
使用方法
#avoid_futureor_void
ルールを有効にするには、analysis_options.yaml
ファイルのlinter > rulesの下にavoid_futureor_void
を追加します
linter:
rules:
- avoid_futureor_void
特に明記されていない限り、このサイトのドキュメントはDart 3.5.3を反映しています。ページの最終更新日:2024-07-03。 ソースを表示 または 問題を報告する。