SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
TypeScript 0.9

GenericsとOverload on Constants
@ukayare
TypeScript?
● Microsoft製オープンソースプログラミング言語
  ○ C#の設計者も開発者として参加している
● JavaScriptのスーパーセット
  ○ 静的片付け
  ○ クラスベースのオブジェクト指向
● ECMAScript6を見越した実装がされている
● MSのサポートもあり(VisualStudioも使える)
TypeScriptの基本機能

● 静的片付け
● 型推論
● クラスベースオブジェクト指向
  ○ インターフェース
  ○ 継承
  ○ モジュール機構
● ラムダ式
● 構造的部分型付け(Structual Subtyping)
各機能の詳しい内容は


割愛
今週の月曜日に

Working on TypeScript 0.9:
Generics, Overload on Constants
and Compiler Performance
という記事が
0.9で追加されるであろう機能(1)


Generics
Generics?
ジェネリック(総称あるいは汎用)プログラミング (generic programming)はデータ形
式に依存しないコンピュータプログラミング方式。
これはデータ型でコードをインスタンス化するのか、あるいはデータ型をパラメータと
して渡すかということにかかわらず、同じソースコードを利用できるということである。
ジェネリックプログラミングは言語により異なる形で実装されている。ジェネリックプロ
グラミングの機能は70年代にCLUやAdaのような言語に搭載され、次にBETA、
C++、D、Eiffel、Java、そして今はなきDECのTrellis/Owl言語などの数多くのオブ
ジェクトベース(object-based)およびオブジェクト指向(object-oriented)言語に採用さ
れた。
1995年の書籍デザインパターンの共著者は(Ada、Eiffel、Java、C#の)ジェネリクス
や、(C++の)テンプレートとしても知られるパラメータ化された型(parameterized
types)としてジェネリクスについて触れている。これらは、型を指定することなく、型を
定義できるようにする(型は使用する時点で引数として与えられる)。このテクニック
(特にデリゲーションを組み合わせるとき)は非常に強力であるが、同時に「動的に、
高度にパラメーター化されたソフトウェアはより静的なソフトウェアよりも理解しづら
い」とその著者は忠告している(Gang of Four 1995:21)。(出展:wikipedia)
????
簡単に言うと

パラメータとして
型情報を渡して、
それを基にクラスや関数を
生成するもの

(C++のtemplateが近い)
例

TypeScript         JavaScript

var 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]
実は

今でもJavaScript
(正確にいうとECMAScript5)
には既にGenerics(ぽい何か)
はある。
先例のmapも一応Generics
(ぽい何か)。
では


何が問題
なのか?
問題は


評価されて
返ってくる
ものの型
例

TypeScript

var point=[
  {x:10,y:20},
  {x:5,y:10},
                      このpointの
  {x:100,y:80}
].map(p => p.x)[1];
                      型は?
期待しているのは




number…?
しかし現実は非情である




number any
ということで

0.9では正しい型が
返るようになる(予定)


※さっきの例ならnumber型
0.9で追加されるであろう機能(2)


Overload on
Constants
Overload on Constants?

特定の引数(定数)に
対しての返り型を
明示的に指定できる
それって


必要なの?
TypeScript的には


必要です
例

「Zaku」を作っている工場があります。
兵隊から「ザクをくれ」と言われたら「zaku」を作っ
て渡します。
しかし「Char」と言う人から「ザクをくれ」と言われた
ときには特注の「CharZaku」を作って渡さないとい
けません。
イメージ

       ザクをくれ




       ザクをくれ
イメージ
コードで書くと
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();
         }
     }
}
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();
     }
}
Overload on Constantsの所感

● interface内の情報が増える
 ○ 内部実装を見なくても実装を把握しやすい
 ○ ただ若干抽象度は下がる?
● 1メソッドで複数パターンの型を返すようなもの
  があるときにはいいかも
 ○ 該当記事ではHTMLElementやEventに対して使うと便
   利だって書いてある
● TypeScriptの現状仕様だとこれはいるな感
 ○ 仕様上同じ親クラスであっても、別クラスである場合同
   一メソッド内で返すことは出来ない


● まあStateパターンの内部実装だよねこれ
まとめ


なかなか
イカした機能が
追加されるようです
で、いつ使えるの?

● とりあえず来月あたりにプレビューとしてα版を
  出す予定
  ○ コンパイラ周りもかなり改修する予定らしい
● 詳しくはcodeplexで動向を見てくれとのこと
  ○ http://typescript.codeplex.com/




※あくまでも予定なのでこの機能は乗らない可能
性もあります
おわり

Más contenido relacionado

Destacado

残パン会の発表
残パン会の発表残パン会の発表
残パン会の発表
ukayare
 
スマートフォンの第3勢力
スマートフォンの第3勢力スマートフォンの第3勢力
スマートフォンの第3勢力
ukayare
 
android drawable
android drawableandroid drawable
android drawable
ukayare
 
ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向
ukayare
 

Destacado (8)

残パン会の発表
残パン会の発表残パン会の発表
残パン会の発表
 
WindowsPhoneとAndroidの話
WindowsPhoneとAndroidの話WindowsPhoneとAndroidの話
WindowsPhoneとAndroidの話
 
スマートフォンの第3勢力
スマートフォンの第3勢力スマートフォンの第3勢力
スマートフォンの第3勢力
 
GR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf 2009: Groovy Usage Patterns by Dierk KönigGR8Conf 2009: Groovy Usage Patterns by Dierk König
GR8Conf 2009: Groovy Usage Patterns by Dierk König
 
android drawable
android drawableandroid drawable
android drawable
 
ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向ハトでもわかるオブジェクト指向
ハトでもわかるオブジェクト指向
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similar a TypeScript0.9

Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Akira Inoue
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
terurou
 

Similar a TypeScript0.9 (20)

ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
20100717tobesetu
20100717tobesetu20100717tobesetu
20100717tobesetu
 
大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話大規模なギョームシステムにHaxeを採用してみた話
大規模なギョームシステムにHaxeを採用してみた話
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
Startup JavaScript
Startup JavaScriptStartup JavaScript
Startup JavaScript
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 

TypeScript0.9