2013年11月17日日曜日

Google Dart 事始め

Google Dartの正式版がリリースされたので使ってみる。

公式ページ


https://www.dartlang.org/


APIリファレンス

1.0リリース前のコードからは変更も多数。最新のAPIをチェックすべき。

http://api.dartlang.org/docs/channels/stable/latest/

参考サイト

DARTことはじめ:http://usagi.github.io/intro-dart/#/
DART入門:http://zenback.itmedia.co.jp/contents/www.sssg.org/blogs/hiro345/archives/10994.html
What is Dart:http://sitekamimura.blogspot.jp/2013/09/dart-what-is-dart-kindle-kathy-walrath.html

言語仕様


  1. クラスを使う
  2. クラスの外側にメソッドが記述可能
  3. オプションと引数:Javaと違って省略引数可能。C++のように後ろの引数を省略 or 引数に名前をつけて省略
  4. 文字列インターポレーション:php的に、"Hello, ${name}"とできる
  5. マルチライン文字列: ($s=<<END;) のような文字列リテラル
  6. 動的メソッドハンドリング:実行時にメソッドがあるか確認する
  7. カスケード演算子: JavaScript の with。
  8. オプショナルな型:小さなアプリなら型をかかない、ちゃんとしたアプリでは型をかく、が選べる
  9. レキシカルスコープ:{}が識別子のスコープ。クロージャ(Java8で実装予定のλや無名関数で実現する関数オブジェクトの一種)やローカル変数キャプチャもOK。
  10. ライブラリ:Pub(オープンなリポジトリで便利)
  11. Isolate:マルチスレッドでお互いのメモリにアクセス出来ないので安全
Javaで出来て、Dartで出来ないのは、メソッドのオーバーロード不可能。intが初期値を代入しないとnullになる。継承は1つまで。

※マルチライン文字列リテラル(以下だったらENDで囲まれた文字列の改行を維持する)
my $s = <<'END';
aaaa
iiii
uuuu
END


※カスケード演算子
with (document) {
  //このブロックの中ではdocument.を省略できる
  var hoge = getElementById('hoge');
  ...
}
※邦訳版
http://www.cresc.co.jp/tech/java/Google_Dart/DartLanguageSpecification_about.html

コードのサンプル


コード動かす

トップページから必要なSDKをダウンロードして解凍すると、Dart Editor (もとはEclipse)が入っているので起動する。

HelloWorld

新しいプロジェクト(WebApplication)を作成すると、webディレクトリの配下に以下のファイルが用意される。

[プロジェクト名].css
[プロジェクト名].dart
[プロジェクト名].html

その他に、packages/browserディレクトリが出来て、中に以下のファイルができる。
dart.js
hiterop.js


編集するのは、「.dart」の拡張子を持つ dart ファイル。後は、htmlとcssを編集する。C系と同じようにエントリーポイント(main)からプログラムが実行される。

dartを編集してから、htmlを右クリックして「run as JavaScript」を実行するとdart2jsが動いてJavaScriptが生成される。

構文

文字列


  • 文字列リテラルはECMAScriptライク
  • ${xxx}や\nなど、シェルスクリプトライクな文法が使用可能
  • ${new Date.now().day -1}などの式を、文字列内に内挿可能


型と変数


  • bool / int / double / num
  • String / List / Set / Queue / Map / ...
  • final 修飾で定数宣言(C++ の const と似ている)


制御文

Javaの構文をほぼそのまま使える

  • for / for-in / while / do-while
  • switch case break / if else / ?:
  • break / continue
  • try throw catch


演算子

Java、C++にある演算子はほぼそのまま使える


関数とラムダ式



クラスの継承

前半にも書いたが、多重継承は不可。


ジェネリクス

使える。型制約も可能。


DART SDK


  • dart : Dart処理系(Dart VM) Dart VMを搭載したブラウザだと動作。V8より高速。
  • frogc(dart2js) : dartからjsへのコンパイラー 
これ直接使うのはしんどい。Dart Editorのバックエンドとして動いてるって知っておく程度。


DART用HTMLファイル

cssとdartファイル指定。JavaScriptを生成してWebサーバに配置すればOK.

毎日さっくりと使えるTODOリストが無かったのでサンプルから作成。


以上。ワクワクする仕様。何つくろうかな。

チュートリアル

https://www.dartlang.org/codelabs/darrrt/#set-up
https://www.dartlang.org/docs/tutorials/add-elements/#copy-app

0 件のコメント:

コメントを投稿