6

ダーツにはvarを意味するa がありますdynamic type

ローカル変数を宣言するときは、次のように記述できます。

String name = "Freewind";

また

var name = "Freewind";

nameエディターはisのタイプを推測できるはずなので、最初は同じだと思っていましたが、Stringすぐに次のことがわかりました。

void hello(String name) { print("hello, $name"); }

int n = 123;
hello(n);      // editor will give an warning here

var m = 456;
hello(m);      // but will not here

DartEditor(Eclipseベース)とIDEAを試してみましたが、どちらも警告を出していませんでしたhello(m)。彼らは をではなくmとして扱っているようで、警告を出していません。dynamicint

私が正しいと理解していれば、タイプセーフチェックを得るために可能な限りタイプを宣言する必要がありますよね? しかし、私varはそれが短いので、型情報を複製する必要がないのが好きです.

それとも、Dart の編集者が十分に強力ではないという理由だけで、将来警告が表示されるという警告はありませんか?

4

2 に答える 2

9

Dart FAQ から:

Dartには型推論がありますか?

型推論は言語仕様で指定されたものではありませんが、実装が自由にできるものです。Dart には動的な型システムがあるため、型推論は Haskell などの言語と同じ役割を果たさないことを覚えておくことが重要です。ただし、Dart Editor は、ローカル変数に var を使用する場合など、いくつかの型推論を行います。Dart VM と dart2js は、パフォーマンスやその他の理由で有用な場合に型推論を使用することを期待しています。


Dart スタイル ガイドから:

ローカル変数の型注釈なしで var を使用する PREFER

現代のコードのメソッド本体は短くなる傾向があり、ローカル変数の型はほとんどの場合、初期化式から自明に推測できるため、明示的な型注釈は通常、視覚的なノイズにすぎません。適切なエディターは、ローカル変数の型を推測でき、期待どおりのオートコンプリートとツール サポートを提供します。


Q: ローカル変数を宣言するときはvar、Dart で型を宣言するか、単に , を使用する方がよいですか?

A: 'var' を使用するより良い方法です。


Q: それとも、Dart の編集者が十分に強力ではないという理由だけで、将来警告が表示されるという警告はありませんか?

A: 近い将来、新しい Dart Editor アナライザーが完全に実装および改善されるときに、これが実現する可能性があります。

于 2013-07-06T09:19:31.843 に答える
4

私が正しいと理解していれば、タイプセーフチェックを得るために可能な限りタイプを宣言する必要がありますよね?

並べ替え。型情報を提供することで、ツールや仲間の人間に意図に関する情報を提供します。あなたが提供するタイプ情報を利用するかどうかは、ツール次第です。

Dart 自体は、チェックモードとプロダクションモードの 2 つのモードで実行されます。エディターからアプリを実行すると、既定ではチェックモードで実行されます。これにより、コードの実行中に型アサーションが効果的に実行されます。上記の例は、警告なしで静的アナライザーを通過しますが、チェック モードでの実行は失敗します。本番モードでは、実行を試みます (この場合は正常に実行されます)。

正常に実行されると、本番モードでコードが処理されたかのように処理されます。

void hello(name) { print("Hello $name"); } // note the lack of type info on the signature

var i = 123;
hello(i); // "Hello 123"

これは事実上 JavaScript と同じです。障害が発生するまで実行されます。型情報は、言語に形式化された単なる注釈であるため、次のように記述すると、

voidhello(Stringname) { ... }voidおよびは 、本番モードStringでは無視される型注釈ですが、ツールと人間の両方で使用できます。

于 2013-07-06T09:34:16.347 に答える