Slide 1

Slide 1 text

Dartの型システム @zetta1985 原 知愛 Dart / Java / JS / DDD / REST Google信者 #SugoiH_c0hama #nagoya.dart 2013/08/25 なごやまつり

Slide 2

Slide 2 text

Dart Runtime Dart Code Dart VM Snapshot dart2js JavaScript V8 etc...

Slide 3

Slide 3 text

Isolates Isolate Receive Port Isolate Receive Port Send Port Send Port Snap shot Snap shot

Slide 4

Slide 4 text

Development Tools Dart Editor Dartium (Browser) Dart SDK Dart VM dart2js dart analyzer dartdoc Pub (Package Manager) Eclipse Plugin IntellJ IDEA Plugin

Slide 5

Slide 5 text

Language Spec 基本はゆるふわなJava ● 言語設計者はGilad Bracha氏 ○ Java言語仕様 ○ JavaVM仕様 ○ Pluggable (Optional) Type System提唱 ● 他、Jochua J. Bloch氏(Effective Javaの人)も

Slide 6

Slide 6 text

Language Spec ● Optional Parameter ● Named Parameter ● Method Cascading ● Const Variable ● Generics ● Named Constructor ● Factory Constructor ● Library Private ● Implicit Interface ● Mix-in

Slide 7

Slide 7 text

動的型付言語(実行環境) + 型検査器(ツール) || Optional Typing

Slide 8

Slide 8 text

Java-likeなLL(Dart VM) + dartanalyzer || Dart

Slide 9

Slide 9 text

良い所 Future & Stream API

Slide 10

Slide 10 text

Future: File IO new File("./foo.txt").fullPath() .then((fullpath) { print("foo.txt's fullpath is $fullpath"); }) .catchError((e) { print("foo.txt is not exists."); });

Slide 11

Slide 11 text

Future: HTTP Request new HttpClient().getUrl(url).then((req){ req.headers.add("contentType", "text/html"); return req.close(); }).then((res) { res.transform( new StringDecoder()).forEach(print); });

Slide 12

Slide 12 text

Stream: Standard Input print("Please Input A."); var lines = stdin .transform(new StringDecoder()) .transform(new LineSplitter()); lines.listen((str){ print("Your input's length : ${str.length}"); print(str == "A" ? "Just A." : "Not A."); });

Slide 13

Slide 13 text

Stream: DOM Event var stream = query("input#hello").onClick; stream.listen((e) { window.alert("hello, world."); });

Slide 14

Slide 14 text

Stream: HTTP Server HttpServer.bind("127.0.0.1", 8080).then((server) { server.listen((req) { req.response.write("This message from my server."); req.response.close(); }); });

Slide 15

Slide 15 text

Stream: File Read Stream stream = new File('bar.txt').openRead(); StreamSubscription> subscription; subscription = stream.listen((bytes) { for (var b in bytes) { print(new String.fromCharCode(b)); if (b == '#'.codeUnitAt(0)) { subscription.cancel(); return; } } });

Slide 16

Slide 16 text

DartとGoogle ● Dartの一番のUserは、Google自身 ● SPDYのような普及方法を目指す? ● GoogleはWebエンジニアと共に、  Web開発の未来を作りたい。 ● JavaScriptを駆逐するわけではない

Slide 17

Slide 17 text

Dartのこれから ● dartanalyzerをもっと進化させたい  (個人的に) ● Chromeにさえ乗っかれば・・・ ● Google App Engine対応が気になる ● Android対応すればワンチャンあるで

Slide 18

Slide 18 text

Thanks