3

次のコードを検討してください。

ButtonElement btnSend = (ButtonElement) query('#btnSendToServer');

内部エラーが表示されます:

Internal error: 'http://127.0.0.1:3030/home/Seth.Ladd/Projects/DartSimpleChat/SimpleChatClient/web/out/simplechatclient.dart': Error: line 30 pos 43: semicolon expected

ButtonElement btnSend = (ButtonElement) query('#btnSendToServer');
                                        ^

質問は次のとおりです。

  • これは明示的なキャストを行う正しい方法ですか?
  • query明示的/暗黙的なキャストをサポートしていますか?
  • から返されたオブジェクトについて心配する必要がありますか、それともqueryオブジェクトが返されると盲目的に信じることができますButtonElementか?
  • のみを検索するクエリはありますButtonElementsか?
4

1 に答える 1

7

Dart は動的型付け言語です。どこにでも型を投げても、それでも動的です。したがって、これを念頭に置いて、通常、キャストするときは、物事が特定のタイプであることを確認したいことを意味します.

あなたの場合、それがButtonElement. 型テストの目的でisand演算子を使用できます。as

// You can write code to test the type yourself:
if (btnSend is! ButtonElement) throw 'Not a button';

// Or you can use "as" that will throw if the type is wrong:
var btnSend = query('#btnSendToServer') as ButtonElement;

場合によってはisまたはを使いますasasパフォーマンスのオーバーヘッドが (小さい?) あるため、通常は を使用しません。

私が個人的に好む別のアプローチがあります。次のようにコードを記述します。

ButtonElement btnSend = query('#btnSendToServer');

開発中は、チェック モードで実行します。

dart --checked foo.dart

または、Dartium を使用する場合は、フラグを使用して Dartium を手動で起動する方法についてお読みください。Dart Editor をしばらく使用していないので、デフォルトでチェック モードが使用されているかどうか、およびそれを変更できるかどうかはわかりません。

btnSendチェック モードで実行している場合、型が一致しない場合にへの代入がスローされます。これの良いところは、チェック モードを使用せずに本番環境でコードを実行する場合、アプリケーションでパフォーマンス オーバーヘッドが発生しないことです。

そして、いくつかの個別の質問に答えるには:

query明示的/暗黙的なキャストをサポートしていますか?

いいえ。タイプを気にしない単なるランダム関数です。

ButtonElements のみを検索するクエリはありますか?

次のように書くことができます:

query('button#btnSendToServer')

これは典型的な CSS セレクターであり、Dart のものではありません。

クエリから返されるオブジェクトについて心配する必要がありますか?それともオブジェクトが返されると盲目的に信じることができますButtonElementか?

はいといいえ。オブジェクトが ではない場合、最終的にはアプリケーションでスローされると思いますが、ButtonElement次のように開発および作成する場合は、チェック モードで実行することをお勧めします。

ButtonElement btnSend = query('#btnSendToServer');

どのくらいのタイプ情報を投入するかはあなた次第です。ボタンのタイプが間違っている可能性が高いと思われる場合は、タイプを指定するのが理にかなっていると思います。個人的には型に夢中になることはありません。

于 2013-04-07T17:18:18.557 に答える