ご存知のように、Dartは現在活発に開発されており、現在次のものがあります。
- コードをローカルで実行するための仮想マシン
- Javascript Dart Code Translator
- Eclipseに基づいて構築された、アルファ段階のシンプルな開発環境Dart Editor。
- Dartiumと呼ばれる特殊なChromiumアセンブリ。Javascriptに変換せずにDartアプリケーションを実行できます。
言語自体の印象
私の考えでは、最も簡単な方法は、少なくとも一度Javaで書いた人にDartに書くことです。Dartの構文はこの言語から多くを借用しているからです。 しかし、誰かがJavaを酷使しているという感じがあります。
- 奇妙なファイル命名規則。 コードの設計に関する推奨ルールの説明では、* .dartファイルには小文字とアンダースコアを付けて名前を付ける必要があると記載されています。 私が理解しているように、この決定の主な理由は、すべてのオペレーティングシステムが大文字と小文字を区別するわけではないということです。 それでも、名前が小文字のファイルを開いてクラスを見つけるのは非常に奇妙です。
- ファイル内のコードの場所。 Dartでは、ファイル内のコードの場所に完全な混乱があります。 コードは、クラスと外部クラスの両方に含めることができます。 この場合、プログラムのエントリポイントはvoid main()メソッドです。 Dart標準ライブラリのコードでさえ、手続き型コードとオブジェクト指向コードの奇妙な混合物です。 単一のファイルに、クラス定義とクラス外にある関数を含めることができます。
- 一部のOOP修飾子の欠如。 Dartにはprivateキーワードがありません。これは、ほとんどのC言語のようにプライベートクラスメソッドを意味します。 代わりに、プライベートメソッドとフィールドの名前はアンダースコアで始まる必要があります。アンダースコアは、他の一部のプログラミング言語の規則にすぎません。
- 構文糖。 信用は、特定の構造の存在に与えられます。これは、構文糖にすぎないと考えることができます。 たとえば、メソッドの実装が短い場合は、署名と同じ行に矢印=>で区切って書き込むことができます。 また、メソッド-ゲッターとメソッド-セッターを示すキーワードget \ setもあります。
- コードの設計に関する奇妙な推奨事項。 Dartは基本的に強く型付けされた言語であり、プログラムの作成時にエラーをすばやくリファクタリングおよびキャッチするための大きな機会を開きます。 ただし、コードスタイルガイドでローカル変数の型を指定しないことをお勧めします。 まあ、非常に、非常に奇妙な...
開発環境の印象
ここではすべてが非常に単純です。環境は湿気が多く、多くのバグがあります。 まず第一に、オートコンプリートの不完全な完了とコードの強調表示は面倒です。 たとえば、オートコンプリートは、クラス自体の内部にプライベートクラスメソッドを表示することを拒否します。 Eclipse DartEditorによって提供されるJavaサポートはまだまだ先ですが、それでも環境はコードの不正なライブラリインポートまたは構文エラーに関連する最も明らかなエラーをキャッチします。 標準のDartライブラリの一部の機能も示しています。たとえば、クライアント(dart:html)とサーバーライブラリ(dart:io)を同時にインポートすることはできません。
約束のコード例
同様の機能が標準ライブラリで利用可能であるという事実にもかかわらず、さまざまなレベルのログ(デバッグ、情報、アラートなど)を持つメッセージをさまざまな出力ストリームに出力できる非常に単純なロガーを作成しました。 ロガーで使用される主な抽象化は次のとおりです。
- core / Severity.dart-メッセージの重大度レベルをDEBUGからEMERGに設定します。
- core / LogEntry.dart-テキストメッセージとメッセージの重要度を保存する単一のログエントリです。
- streams / Stream.dart-メッセージ出力ストリーム。ユーザーへのメッセージの表示方法を設定します。 上記の各出力ストリームは、このクラスから継承されます。 独自の出力ストリームを作成することもできます。
現在、3つの出力ストリームが実装されています。
- streams / StdoutStream.dart - print()を使用した標準出力ストリーム
- streams / WebConsoleStream.dart-ブラウザーのWeb開発者コンソールへの出力
- streams / FileStream.dart-ファイルへの出力
ロガーの使用は非常に簡単です。
#import("vader_server.dart"); void main(){ Vader vader = Vader.vader(new StdoutStream()); vader.logWarn("You don't know the power of the dark side!"); vader.logInfo("Luke, I am your father!"); }
開始するには、ライブラリファイルの1つをインポートします: vader_server.dart (ファイルへのログイン用)またはvader_client.dart (ブラウザへのログイン用)。 この分離は、クライアントライブラリとサーバーライブラリを同時にDartにインポートできないためです。 このリンクでコメントを提供されたロガーコードを見ることができます。