Dartで「新しい」キーワードを使用する必要がありますか?


90

私のDartベースのアプリケーションでは、newキーワードを省略でき、すべてが完全に正常に機能することに気づきました。

代わりにfinal widget = new Widget();も使用できますfinal widget = Widget();

これはコードに影響がありますか?

回答:


112

いいえ、違います。ダート2(より多くの情報を発表するためにクリック)newしても、constキーワードが行われたオプション

これは、それ自体がnew Widget()まったく同じことを行うことを意味しWidget()ます。


constキーワードは、しかし、ではないであろう値に変更することができますconst暗黙的にしますconst
したがってconst、必要に応じて明示的に指定する必要があります。


6
ダートチームは今のビットを撤回しなければならなかったし、いくつかの状況があるnewconstはまだ必要とされるが(私は例やルールを覚えていません)。彼らはダート2の後に別の場所でそれをオプションにしようとするかもしれません。
ギュンターZöchbauer

1
new必要な場所はありません。new正しいプログラムを省略しても、常に同じように機能します。const動作中のプログラムから削除した場合、プログラムを有効にするために記述しなければならないほとんどの場合const、プログラムは引き続き有効です。const式がすでに囲まれている場合は、ネストされたconstを省略できます。
lrn 2018年

20

Dart 2では、関数のように、newまたはconst前にコンストラクタを呼び出さない場合、を使用するのと同じnewです。const呼び出しが必要な場合はconst、前に置く必要があります。

const式の内部ではconst再度記述する必要はありません。const式を必要とする一部のコンテキスト(スイッチケース式やconst変数の初期化子など)では、外側のconstさえ必要ありません。

だから、書く必要はありませんnew

ダートの言語のチームはあなたがどちらか挿入できる表現できるようにしたいnewconst、まだ(であること、一定の引数付きのconstコンストラクタ)が挿入をデフォルトに呼び出しが正しい持ちをconstするのではなく、newうまくいけば、その理由ダート2への早期のアップデートでは、 、オブジェクトを新しいインスタンスにする必要がある場合newObject()、やその他のconstコンストラクタの前に記述することをお勧めします。これは非常にまれなケースであり、通常は不変オブジェクトのIDを気にしません(そのため、挿入は良い考えと見なされます)。const



4

newキーワードは常に、そのクラスの新しいインスタンスを返しますクラスを呼び出して、今のダート2としてオプションになりました。私の推奨事項に従って、レイアウト定義の外ではそれを使用できます(必須ではありません)が、レイアウト内では省略できます。

皆さんと共有したいもう1つのポイントは、ウィジェットを宣言するときにnewまたはconstキーワードを使用すると、ウィジェットの本体コードを折りたたんだり展開したりするために使用できる+アイコンも表示できることです。これは、同じファイルの別のウィジェットコードで作業しているときに、dartファイルの残りのウィジェットコードを折りたたむ/非表示にする場合に便利です。


その崩壊するものの良いキャッチ
MoGa

2
折りたたみ動作はIDE固有です。どちらに適用するかを明示する必要があります。
jamesdlin

1
また、「クラスの呼び出し」(「クラスのコンストラクターの呼び出し」を意味すると思います)は、常にクラスの新しいインスタンスを返すとは限りません。ファクトリコンストラクターを呼び出すと、既存のインスタンスが返される場合があります。これがnew推奨されない理由です。使用しない場合、無条件に新しいインスタンスが作成されるように見えます。
jamesdlin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.