8

不明な型の値を返す関数がある場合、dynamic任意のオブジェクトを表す を使用するかObject、他のすべての型の祖先である を使用しますか?

スタイル ガイドでは、この質問についてパラメーターについて説明していますが、戻り値については説明していません。

戻り値にどのように注釈を付ける必要がありますか?またその理由は?

4

1 に答える 1

8

Dart エンジニアの Bob Nystrom は次のように書いています。

戻り値の型は、この問題に対する興味深いひねりです。パラメータ型の場合、ガイドラインは非常に単純です。

  1. パラメータ型として使用する場合Object、「私のメソッドは任意のオブジェクトを安全に受け入れ、toString()すべてのオブジェクトがサポートするようなものにのみ使用します」と言っています。

  2. パラメータ型として使用するdynamic(または何も使用しない) 場合は、「Dart の型システムでは、ここで受け入れる型を簡単に表現できない」または「わざわざ注釈を付けなかった」と言っています。

(1)をひっくり返すのは難しい。戻り値の型については、「自分で型テストを行う前に、すべてのオブジェクトがサポートするものObject以外は何も呼び出さない方がよい」と言うでしょう。私たちがしていること」。toString()dynamic

ユーザーは、コンパイラの警告を回避し、チェック モードで早期にエラーを取得するために、表示されると予想される特定の型に "キャスト" する必要があります。

多くの場合、Object を返す場合でもキャストする必要はありません。Dart では、型注釈を使用してローカル変数を初期化するときに、暗黙的なダウンキャストが許可されます。したがって、次のことができます。

Object foo() => 123;

main() {
  int x = foo(); // Implicit downcast. No type warning.
}

この場合、おそらくそうすると思いますdynamicが。Object. _

于 2013-04-12T20:59:34.113 に答える