TypeScript0.9

467 views

Published on

LTでやったやつ

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
467
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TypeScript0.9

  1. 1. TypeScript 0.9GenericsとOverload on Constants@ukayare
  2. 2. TypeScript?● Microsoft製オープンソースプログラミング言語 ○ C#の設計者も開発者として参加している● JavaScriptのスーパーセット ○ 静的片付け ○ クラスベースのオブジェクト指向● ECMAScript6を見越した実装がされている● MSのサポートもあり(VisualStudioも使える)
  3. 3. TypeScriptの基本機能● 静的片付け● 型推論● クラスベースオブジェクト指向 ○ インターフェース ○ 継承 ○ モジュール機構● ラムダ式● 構造的部分型付け(Structual Subtyping)
  4. 4. 各機能の詳しい内容は割愛
  5. 5. 今週の月曜日にWorking on TypeScript 0.9:Generics, Overload on Constantsand Compiler Performanceという記事が
  6. 6. 0.9で追加されるであろう機能(1)Generics
  7. 7. Generics?ジェネリック(総称あるいは汎用)プログラミング (generic programming)はデータ形式に依存しないコンピュータプログラミング方式。これはデータ型でコードをインスタンス化するのか、あるいはデータ型をパラメータとして渡すかということにかかわらず、同じソースコードを利用できるということである。ジェネリックプログラミングは言語により異なる形で実装されている。ジェネリックプログラミングの機能は70年代にCLUやAdaのような言語に搭載され、次にBETA、C++、D、Eiffel、Java、そして今はなきDECのTrellis/Owl言語などの数多くのオブジェクトベース(object-based)およびオブジェクト指向(object-oriented)言語に採用された。1995年の書籍デザインパターンの共著者は(Ada、Eiffel、Java、C#の)ジェネリクスや、(C++の)テンプレートとしても知られるパラメータ化された型(parameterizedtypes)としてジェネリクスについて触れている。これらは、型を指定することなく、型を定義できるようにする(型は使用する時点で引数として与えられる)。このテクニック(特にデリゲーションを組み合わせるとき)は非常に強力であるが、同時に「動的に、高度にパラメーター化されたソフトウェアはより静的なソフトウェアよりも理解しづらい」とその著者は忠告している(Gang of Four 1995:21)。(出展:wikipedia)
  8. 8. ????
  9. 9. 簡単に言うとパラメータとして型情報を渡して、それを基にクラスや関数を生成するもの(C++のtemplateが近い)
  10. 10. 例TypeScript JavaScriptvar point=[ var point=[ {x:10,y:20}, {x:10,y:20}, {x:5,y:10}, {x:5,y:10}, {x:100,y:80} {x:100,y:80}].map(p => p.x); ].map(function(p){ return p.x });//[10, 5, 100]
  11. 11. 実は今でもJavaScript(正確にいうとECMAScript5)には既にGenerics(ぽい何か)はある。先例のmapも一応Generics(ぽい何か)。
  12. 12. では何が問題なのか?
  13. 13. 問題は評価されて返ってくるものの型
  14. 14. 例TypeScriptvar point=[ {x:10,y:20}, {x:5,y:10}, このpointの {x:100,y:80}].map(p => p.x)[1]; 型は?
  15. 15. 期待しているのはnumber…?
  16. 16. しかし現実は非情であるnumber any
  17. 17. ということで0.9では正しい型が返るようになる(予定)※さっきの例ならnumber型
  18. 18. 0.9で追加されるであろう機能(2)Overload onConstants
  19. 19. Overload on Constants?特定の引数(定数)に対しての返り型を明示的に指定できる
  20. 20. それって必要なの?
  21. 21. TypeScript的には必要です
  22. 22. 例「Zaku」を作っている工場があります。兵隊から「ザクをくれ」と言われたら「zaku」を作って渡します。しかし「Char」と言う人から「ザクをくれ」と言われたときには特注の「CharZaku」を作って渡さないといけません。
  23. 23. イメージ ザクをくれ ザクをくれ
  24. 24. イメージ
  25. 25. コードで書くとclass MS{}class Zaku extends MS{}class CharZaku extends Zaku{}interface Factory{ orderZaku(orderName:string):MS;}class ZakuFactory implements Factory{ orderZaku(orderName:string){ if(orderName=="Char"){ return new CharZaku(); }else{ return new Zaku(); } }}
  26. 26. Overload on Constantsで書くとclass MS{}class Zaku extends MS{}class CharZaku extends Zaku{}interface Factory{ orderZaku(orderName:string):Zaku; orderZaku(orderName:"Char"):CharZaku;}class ZakuFactory implements Factory{ orderZaku(orderName:string){ return new Zaku(); } orderZaku(orderName:"Char"){ return new CharZaku(); }}
  27. 27. Overload on Constantsの所感● interface内の情報が増える ○ 内部実装を見なくても実装を把握しやすい ○ ただ若干抽象度は下がる?● 1メソッドで複数パターンの型を返すようなもの があるときにはいいかも ○ 該当記事ではHTMLElementやEventに対して使うと便 利だって書いてある● TypeScriptの現状仕様だとこれはいるな感 ○ 仕様上同じ親クラスであっても、別クラスである場合同 一メソッド内で返すことは出来ない● まあStateパターンの内部実装だよねこれ
  28. 28. まとめなかなかイカした機能が追加されるようです
  29. 29. で、いつ使えるの?● とりあえず来月あたりにプレビューとしてα版を 出す予定 ○ コンパイラ周りもかなり改修する予定らしい● 詳しくはcodeplexで動向を見てくれとのこと ○ http://typescript.codeplex.com/※あくまでも予定なのでこの機能は乗らない可能性もあります
  30. 30. おわり

×