不明な型の値を返す関数がある場合、dynamic
任意のオブジェクトを表す を使用するかObject
、他のすべての型の祖先である を使用しますか?
スタイル ガイドでは、この質問についてパラメーターについて説明していますが、戻り値については説明していません。
戻り値にどのように注釈を付ける必要がありますか?またその理由は?
Dart エンジニアの Bob Nystrom は次のように書いています。
戻り値の型は、この問題に対する興味深いひねりです。パラメータ型の場合、ガイドラインは非常に単純です。
パラメータ型として使用する場合Object
、「私のメソッドは任意のオブジェクトを安全に受け入れ、toString()
すべてのオブジェクトがサポートするようなものにのみ使用します」と言っています。
パラメータ型として使用するdynamic
(または何も使用しない) 場合は、「Dart の型システムでは、ここで受け入れる型を簡単に表現できない」または「わざわざ注釈を付けなかった」と言っています。
(1)をひっくり返すのは難しい。戻り値の型については、「自分で型テストを行う前に、すべてのオブジェクトがサポートするものObject
以外は何も呼び出さない方がよい」と言うでしょう。私たちがしていること」。toString()
dynamic
ユーザーは、コンパイラの警告を回避し、チェック モードで早期にエラーを取得するために、表示されると予想される特定の型に "キャスト" する必要があります。
多くの場合、Object を返す場合でもキャストする必要はありません。Dart では、型注釈を使用してローカル変数を初期化するときに、暗黙的なダウンキャストが許可されます。したがって、次のことができます。
Object foo() => 123;
main() {
int x = foo(); // Implicit downcast. No type warning.
}
この場合、おそらくそうすると思いますdynamic
が。Object
. _