-->

2015年04月

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

C#やJavaのジェネリクスと同じような感じです。

こんな感じ。

// 関数で使う
function a<T>(val:T):void {
	alert(typeof val);
}

a<number>(12);			// numberと表示
a<string>("hoge");		// stringと表示

// クラスで使う
class hoge<T> {
	private aaa:T;
	
	constructor(val:T) {
		this.aaa = val;
	}
	public show():void {
		alert(typeof this.aaa + ":" + this.aaa);
	}
}

var h1:hoge<number> = new hoge<number>(10);
h1.show();		// number:10と表示
var h2:hoge<string> = new hoge<string>("hoge");
h2.show();		// string:hogeと表示

このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

内部モジュールと外部モジュールというのがある。
内部モジュールは、C#のnamespaceやJavaのpackageなんかと同じように名前の衝突をさけたりするもの。外部モジュールは、外部ファイルから参照やロード(動的ロード?)するためのもの。と、勝手に認識してる(^^;)

内部モジュールは次のような感じ。

module hoge {
	//  class bはexportしてないのでモジュール内でしか使えない。
	class b {
		public message(text:string):void {
			alert(text);
		}
	}

	export class a {
		private bbb:b; // モジュール内なので使える
		
		constructor() {
			this.bbb = new b();
		}
		public message(text:string):void {
			alert(text);
		}
		public messageB():void {
			this.bbb.message("messageB");
		}
	}
}

var aaa:hoge.a;
aaa = new hoge.a();
aaa.message("にょ");		// "にょ"って表示される

var bbb:hoge.b;			// class bをexportしていないのでエラーになる。

外部モジュールは、CommonJSやAMDの仕様に合わせたモジュールとしてコンパイルされるものらしい。
これは必要になったときに調べよーwww



このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

インターフェイス
C#やJavaのインターフェイスみたいなもの。

// インターフェイスの定義
interface Hoge {
	aaa:number;
	hoge():string;
}
 
// インターフェイスHogeを実装したクラス
class HogeHoge implements Hoge {
	aaa:number;
	constructor() {
		this.aaa = 10;
	}
	public hoge():string {
		return "hogehoge:" + this.aaa;
	}
}
 
var aaa:Hoge = new HogeHoge();
// ↓こんな書き方も出来る
var bbb:Hoge = {
	aaa:20,
	hoge: function() {
		return "bbb.hoge():" + this.aaa;
	}
}
 
alert(aaa.hoge());        // "hogehoge:10"が表示される
alert(bbb.hoge());        // "bbb.hoge():20"が表示される。

このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

よし、次はクラスだ。

メンバ変数、関数は次のように宣言する。varやfunctionはなしで変数や関数の宣言と同じように書く。アクセス修飾子は、public、privateだけでprotectedはないようだ。

class Hoge1 {
	// メンバ変数
	private aaa:number;

	// コンストラクタ
	constructor(a:number) {
		this.aaa = a;
	}

	// メンバ関数
	public hoge():number {
		return this.aaa;
	}

	private hogeHoge():number {
		return 44;
	}

	// プロパティ
	// アクセッサ(set)
	public set AAA(val:number) {
		alert("set");
		this.aaa = val;
	}
	// アクセッサ(get)
	public get AAA():number {
		alert("get");
		return this.aaa;
	}

}

var hoge1:Hoge1 = new Hoge1(20);
alert(hoge1.AAA);
hoge1.AAA = 33;
alert(hoge1.hoge());	// メンバ関数を呼び出す。
alert(hoge1.hogeHoge()); // プライベートなんでエラー

継承は次のような感じ。クラス名のあとにextendsでスーパークラス名を書く。
コンストラクタでスーパークラスのコンストラクタを呼ぶのはsuper()で呼び出さないといけない。superでスーパークラスの関数や変数、プロパティにアクセスできる。
関数のオーバーライドは同じ関数を宣言するだでオーバーライドできる。

class Hoge1 {
	// メンバ変数
	private aaa:number;
	
	// コンストラクタ
	constructor(a:number) {
		this.aaa = a;
	}
	
	// メンバ関数
	public hoge():string {
		return "Hoge1.hoge()";
	}
	
	// プロパティ
	// アクセッサ(set)
	public set AAA(val:number) {
		this.aaa = val;
	}
	// アクセッサ(get)
	public get AAA():number {
		return this.aaa;
	}
}

class Hoge2 extends Hoge1 {
	private bbb:number;
	
	constructor() {
		super(234);		// スーパークラスのコンストラクタ呼び出し
		this.bbb = 2;
	}
	public hoge():string {
		return "Hoge2.hoge()";
	}
	public hoge2():string {
		return super.hoge();	// superでスーパークラスの関数を呼び出す。
	}
	public getBBB():number {
		return this.bbb;
	}
}
var hoge1:Hoge1 = new Hoge2();	// 継承してるのでHoge1型の変数に代入できる
alert(hoge1.hoge());		// "Hoge2.hoge()"が表示され、オーバーライドできてるのが確認できる
alert(hoge1.AAA);			// "234"が表示される

var hoge2:Hoge2 = <Hoge2>hoge1;		// これでダウンキャストできる
alert(hoge2.hoge2());
alert(hoge2.getBBB());

インターフェイスについては次のメモ(予定)で書こうかな。


このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

クラスに行こうかと思ってたが、引数の省略と関数のオーバーロードについて書く。

引数の省略は変数名の後に?をつけると、省略可能になる。省略された場合、変数の値はundefinedになる。

function hoge(a:string, b?:number) :void {
	alert("hoge:" + a +"," + b);
}

hoge("aaa");

この場合、"hoge:aaa,undefined"と表示される。

省略された時のデフォルト値を指定する方法がある。

function hoge(a:string, b:number = 10) :void {
	alert("hoge:" + a +"," + b);
}

hoge("aaa");

この場合、"hoge:aaa,10"と表示される。

可変長引数は、変数の前に…を付けて配列する。

function hoge(a:string, ...b:any[]):void {
	alert("hoge:" + a +"," + b);
}

hoge("aaa",10,2);

関数のオーバーロードは、引数の型が違う関数の宣言を書いておき、型の違う引数のところをanyやobjectにした関数本体を宣言する。その関数内で型のを調べて処理を分岐することでオーバーロードっぽいことを実現する。

function hoge(a:number):void;
function hoge(a:string):void;

function hoge(a:any):void {
	if(typeof a == "number") {
		alert("number");
	} else {
		alert("string");
	}
}
hoge(18);

この場合、"number"と表示される。


このエントリーをはてなブックマークに追加

↑このページのトップヘ