20ヶ月を取り戻す わかめ まさひろ
20ヶ月を取り戻す
わかめ まさひろ
わかめ まさひろ@v vakame
GAE
AndroidTypeScript
AngularJSGlass
2012年05月12日
Dartハッカソン!
Winner!うちのチーム勝ちました!
BDDテスト的なの作った
http://vvakame.github.io/teaolive/old/
#library('teaolive_introduction'); !#import('dart:html'); #import('packages/teaolive/teaolive.dart'); #import('packages/teaolive/reporter/reporter_combinator.dart', prefix: 'combinator'); #import('packages/teaolive/reporter/tap_reporter.dart', prefix: 'tap'); #import('packages/teaolive/reporter/html_reporter.dart', prefix: 'html'); !void main() { addTest(testCase); setTeaoliveReporter( new combinator.TeaoliveReporterCombinator( [ new html.TeaoliveHtmlReporter(), new tap.TeaoliveTapReporter() ] )); teaoliveRun(); } !void testCase() { describe("A suite", (){ it("contains spec with an expectation", (){ expect(true).toBe(true); }); }); }
時は流れ…
20 month later…
Version History• 2012/10/16 M1!
• 2012/12/18 M2!
• 2013/02/20 M3!
• 2013/04/16 M4!
• 2013/06/19 M5-Beta!
!
• 2013/08/27 M6-Beta!
• 2013/10/02 M7-Beta!
• 2013/11/14 1.0!
• 2014/01/16 1.1
イベント中アプデの法則で 本日 1.1.4の可能性が
微粒子レベルで存在…?
まぁないだろ
goo.gl/mtSRKL
コンパイル できない…
ハッカソン当時は0.0.8とか
当時の思い出• unittestのライブラリ!
• bleeding_edgeにしかない!
• 使い方もよくわかんない!
• pub (Dartパッケージ管理システム)!
• 立ち上げるぞ!みたいな時期!
• まだ影も形もほとんどなかったTypeScriptもなかった
直した
http://vvakame.github.io/teaolive/
library teaolive_introduction; !import 'dart:async'; import 'package:teaolive/teaolive_browser.dart'; !void main() { addTest(testCase); setTeaoliveReporter( new TeaoliveReporterCombinator( [ new TeaoliveHtmlReporter(), new TeaoliveTapReporter() ] )); teaoliveRun(); } !void testCase() { describe("A suite", (){ it("contains spec with an expectation", (){ expect(true).toBe(true); }); }); }
途中経過
だいたい4時間で 直せた!
古いDart Editorを使おう• 古いコードのMigration機能がある!
• http://goo.gl/ae2KIL!• 誰の提供か謎なので少し怖い!
• build 12784, 18717!• M4くらいから無くなったぽい!
• プロジェクト右クリ→Clean up!
• diff http://goo.gl/y9zX5q
1.1.3に対応しよう• ちゃんと最新のDartEditor使う!• とりあえずコンパイルを通す!
• http://goo.gl/PLIASf!• API変更による修正が主!• 構文上の修正は少ない!
• デフォルト値付き省略可能引数!• 例外処理周り!• dynamicへのキャスト方法
まだまだ…
• 文法的に正しくてもWarningが残る!
• Runtime ErrorになるWarning多い!!
• なぜErrorにしてくれないのか!!
• 文化が変わったところに対応!
• ちょっとやりきってないけど><
文化の変化
おやじギャグではない
pub• パッケージマネージャ!
• RubyGems, CPAN, npm, Mavenとか!
• かなりよく出来てる!!
• pubを中心とした規約!
• pubspec.yamlとか!
• フォルダ構成とか
組込ライブラリとpub
組込ライブラリとpub#import('dart:io'); #import('dart:uri'); void main() { String payload; HttpClient client = new HttpClient(); HttpClientConnection connection = client.getUrl(new Uri.fromString(http://vvakame.github.io/teaolive/")); connection.onResponse = (HttpClientResponse response){ StringBuffer buffer = new StringBuffer(); InputStream input = response.inputStream; input.onData = (){ buffer.add(new String.fromCharCodes(input.read())); }; input.onClosed = (){ client.shutdown(); payload = buffer.toString(); print(payload); }; }; }
0.0.8くらい
組込ライブラリとpub
import 'package:http/http.dart' as http; void main() { var client = new http.Client(); client.get("http://vvakame.github.io/teaolive/") .then((response) { print(response.body); }); }
1.1.3 + pub
Future oriented language
• DartはFuture(Promise)を基盤に据えた!
• っぽい!
• 個人の感想かも!?教えて偉い人!!
• http://goo.gl/ru2Tu6!
• (取組みが)ES6 Promiseよりはやーい!
言語の変化
細かい事はわからん!
ナウくなった• Editor上で簡単な型推論とかできるぽい!
• var client = new http.Client() 的な!• ライブラリを複数ファイルで構成可能!
• library hoge と part of hoge!
• analyzerが割りと頭良い!• 複数ファイルから参照されている場合全てのユースケースでのWarning出す
dart:js• http://goo.gl/GOktnP!
• 頑張ればJavaScript呼べるようになった!
• すごい!postMessageとかじゃない!!
• TypeScriptの型定義ファイル役に立つ?!
• .d.tsからDartラッパ自動生成できる?!
• Dartisanに型定義ファイル書かせよ❤
dart:mirrors• Mirror based reflection!
• ちゃんと実装されたらしい!
• あれっ!? goo.gl/S9bRCg!
• JavaのJSR269感を感じる…!
• 同じ考え方のものかな?!
• シンボルが導入された #hoge!
• いいなーJavaScriptにも欲しい
更に詳しくしりたい時
Dart(流行れば)良い言語
参考資料• 株式会社クレスさんがヤバい!
• Dartの基礎!! goo.gl/M1Nul8!
• Dart仕様邦訳!goo.gl/MAl6SN!
• Cheat Sheet!
• goo.gl/ceTqb超初期からコツコツと…!
お時間どうですかー?
宣伝 (しかしAndroidだ
クレスさん資料より• 抽象クラス増えた!• mix-in 増えた!• Stream 導入!
• java.util.stream, Node.js EventEmitter!• 関数エミュレーション!
• TypeScriptでいうcall signature!• metaデータ!• Windows XP 非サポートに