Dartをはじめよう
ながぬまたつみ
Dart
A new platform for structured web
apps
オープンソースで開発中の新言語
Googleが主体
Dart
A new platform for

structured web apps
構造化ウェブ アプリケーション?
現在のWeb
JavaScriptは素晴らしい
● プロトタイプベース オブジェクト指向に
  よる拡張性
● 関数言語としての特性
● 豊富なライブラリ
現在のWeb....だけど
JavaScriptのこんなところが微妙
● 型がない
 ○ 関数の引数、戻り値が分かりづらい
● プロトタイプベースは特殊
  ○ 動的すぎて把握しきれない
● スコープがわかりづらい&弱い
  ○ 他の言語と違う部分が多い
  ○ ライブラリの仕組みがない
Web開発に構造化を
JavaScriptは大きめの開発に向かない
● 並行開発が難しい
 ○ インターフェイスを定義しづらい
● ライブラリ選びが難しい
  ○ 混ぜて使っても大丈夫か



→ 解決したい!
型
● 組み込み型
  ○ int、double、String、List、Map...
  ○ var
● ジェネリクス
  ○ List < int >
  ○ Map < int , String >
チェック モード
● 型はオプショナル
  ○ チェック モード : 型チェックあり
  ○ プロダクション モード : 型チェックなし

int foo = "Hello";
Failed type check: type String is not assignable
to type int


                     http://try.dartlang.org/s/kRU9
クラスベース
● クラスベース オブジェクト指向言語
 ○ JavaScript より Java に近い

interface Animal {}
class Dog implements Animal {}




               http://try.dartlang.org/s/eF08
ライブラリ機構
● #library (ライブラリ名)
● #import (ライブラリ名 prefix: 接頭子)
● ライブラリ プライベート
  ○ _で始まる変数や関数、クラスなど

#import ('dart:io', prefix:'io')
new io.File('memo.txt');
標準ライブラリ
●   dart:core
●   dart:isolate
●   dom
●   html
●   io
●   json
●   uri
●   utf
もっと便利に 〜

関数
int compare(a,b){return a - b;}
col.sort(compare);

col.sort((a,b) { return a - b; });

col.sort((a,b) => a - b);



               http://try.dartlang.org/s/wtQ9
もっと便利に 〜

クロージャ
counter(c) { return () => c++; }

var c1 = counter(1);
var c2 = counter(3);
for (int i = 0; i < 3; i++) {
  print(c1()); print(c2());
}


               http://try.dartlang.org/s/E208
もっと便利に 〜

文字列補完
● ${式} で文字列を補完

String title = 'Test';
String s = '''
<h1>$title</h1>
<p>123 + 456 = ${123+456}</p>
<p>random = ${Math.random()}</p>
''';
               http://try.dartlang.org/s/0cQ9
もっと便利に 〜

リスト&マップ
var list = [ 1, 2, 3 ];
var map = {
   'hello': 'world',
   'twice': (e) => e * 2
};
print("${list[0]}");
print("${map['hello']}");
print("${map['twice'](3)}");

               http://try.dartlang.org/s/fq88
もっと便利に 〜

演算子オーバーロード
class Point {
  Point(this.x, this.y);
  final x, y;
  operator + (Point p) =>
    new Point(x + p.x, y + p.y);
}
var p = new Point(1, 2)
      + new Point(3, 4);

               http://try.dartlang.org/s/w9Q9
+1
こんなにすばらしい Dart ですが
まだ開発中...
文法は確定していません。
開発環境は完成していません。
実行環境は完成していません。
(2012/4/28 現在)
まだ開発中...
文法は確定していません。v0.8
開発環境は完成していません。
実行環境は完成していません。
(2012/4/28 現在)

でも、今すぐ試せます。
Dartboard
http://try.dartlang.org/
Dartium
Chromium with the Dart VM
frogc
● Dart to JavaScript コンパイラ
● Dartium以外のブラウザで実行
● Dartで実装されている

$ frogc test.dart
$ ls
test.dart test.dart.js
Dart Editor
Dart Editor - 新規アプリ
Dart Editor - 補完
Dart Editor - デバッグ
Dart Editor
● Eclipseベース
● 新規アプリ ウィザード
  ○ Webアプリ、サーバ
● JavaScriptへの変換&実行
● デバッガ
  ○ Webアプリ+Dartiumのみ
Dart & JavaScript
● DartはJavaScriptを置き換えない
  ○ 共存可能
  ○ 適材適所
● JavaScriptは偉大
  ○ でも選択肢があってもいい
● 人気上昇中!
 ○   Dart is the #72 most popular
     language on GitHub
 ○   (JavaScript is the most popular language on GitHub)
Dartのこれから
● Dart本体
  ○ 言語仕様、高速化
● ライブラリ
  ○ 単体テスト、パッケージ システム
● サーバー サイド
  ○ dart:io、フレームワーク
● モバイル
  ○ Android
やってみよう
まだ話していないことも
たくさんあります。

とにかくやってみよう。
ありがとうございました
資料
● http://www.dartlang.org/
● 日経Linux 2012年2月号、3月号
  Dart記事 ... SSS(G) 小山さん執筆
● What is Dart? O'Reilly $0

Dartをはじめよう