スタートページ>
Javascript>
TypeScript
TypeScriptの概要←
型指定の基本(1)←
型指定の基本(2)←
型指定の基本(3)→
型指定の基本(4)
1 class 自動車クラス { 2 // プロパティ 3 車名: string; 4 区分: string; 5 排気量: number; 6 // コンストラクタ 7 constructor(車名: string, 区分: string, 排気量:number) { 8 this.車名 = 車名; 9 this.区分 = 区分; 10 this.排気量 = 排気量; 11 } 12 // メソッド 13 車表示() { 14 console.log(this.車名 + ", " + this.区分 + ", " + this.排気量) 15 } 16 }
このクラスで用いる変数(通常はデータベースのレコードの属性)と型の定義です。
レコードが、
自動車 = = new 自動車クラス(車名, 区分. 排気量);
ならば、車名, 区分. 排気量が列挙されます。
データが入力されたときの初期設定です。
constructor(車名: string, 区分: string, 排気量:number)
は、プロパティと重複していますが、これは外部から
自動車 = new 自動車クラス(車名, 区分. 排気量);
として与えられることを想定しているからで、外部では
自動車 = new 自動車クラス(name, type. cc);
の変数を用いているならば、
constructor(name: string, type: string, cc:number) {
this.車名 = name;
this.区分 = type;
this.排気量 = cc;
と指定します。
this とは、「ここでの」という意味です。「自動車.車名」の「自動車」を一般化しています。
メソッドは、class 内で、this.xx をグローバル変数とした、関数の機能です。
ここでは、入力データを console.log していますが、関数と同様、この時点では実行されません。
外部から 車A.車表示(); のように呼び出せれた時点で実行されます。
通常の関数なら 車表示(車A)の形式になりますが、メソッドでは 車A.車表示() の形式になります。
17
18 // クラスブロック外からの処理
18 var 車A = new 自動車クラス('スカイライン', '乗用車',1500);
19 車A.車表示(); // スカイライン, 乗用車,1500 class内のメソッドの実行
20 console.log(車A.区分); // 乗用車 class によりこのような形式ができる。
21
22 var 車B = new 自動車クラス('カーゴ', 'トラック',9200);
23 if (車A.排気量 >= 車B.排気量) { // このような通常のプログラムが記述できる。
24 var 大排気量区分 = 車A.区分;
25 }
26 else 大排気量区分 = 車B.区分;
27 console.log(大排気量区分); // トラック
28
29 var 車C = new 自動車クラス('カワサキ', 'オートバイ',400cc); // 排気量の型エラー
「自動車クラス」をスーパークラスとして、サブクラス「乗用車クラス」を定義します。
スーパークラスでのプロパティ「車名、区分、排気量」の設定を継承し、さらに「乗車人数」を加えます。
30 31 // ========== サブクラス ============= 32 class 乗用車クラス extends 自動車クラス { 33 乗車人数 : number; 34 // コンストラクタ 35 constructor(車名: string, 区分: string, 排気量:number. 乗車人数:number) { 36 super(車名, 区分, 排気量); 37 this.乗車人数 = 乗車人数; 38 } 39 }
サブクラスは、次の形式で定義します。
class サブクラス extends スーパークラス { // extend は「拡張」の意
}
スーパークラスからのプロパティを継承して、さらにサブクラスで新プロパティを追加するには、 コンストラクタで次の形式で指定します。
constructor(入力される全プロパティと型) {
super(継承するプロパティ);
this.新プロパティ = 新プロパティ;
}
40 // 外部からの処理 41 var 車D = new 乗用車クラス('マーク2', '乗用車',1500, 5); 42 console.log(車D.乗車人数); // 5 OK 43 console.log(車B.乗車人数); // エラー 車Bは自動車クラスで乗車人数項目はない 44 var 車E = new 乗用車クラス('クラウン', '乗用車',2500); // 乗車人数が欠けている
Classのプロパティとメソッドは、アクセス修飾子により、アクセス可能/禁止を設定できます。
一般形 アクセス修飾子 変数 : 型;
例: private 氏名: string;
1 class 学生クラス { 2 // プロパティ 3 private 氏名: string; 4 public 学部: string; 5 readonly 年齢: number; 6 // コンストラクタ 7 constructor(氏名: string, 学部: string, 年齢: number) { 8 this.氏名 = 氏名; 9 this.学部 = 学部; 10 this.年齢 = 年齢; 11 // 内部処理 12 this.年齢++; // 内部処理は修飾子に関係なく処理できます。 13 console.log(this.氏名 + ", " + this.学部 + ", " + this.年齢); 14 // "阿部, 文学部, 21" 年齢は入力データが20だったのが21になる 15 } 16 // メソッド 17 private 氏名表示() { 18 console.log(this.氏名) 19 } 20 学部表示() { // 修飾子省略 public 21 console.log(this.学部) 22 } 23 } 24 25 // レコードの作成 26 var 学生A = new 学生クラス('阿部','文学部',20); // 修飾子に関係なく読み込まれます。 27 // 外部からの参照 28 console.log(学生A.氏名); // 氏名は private なので外部からアクセスできません。 29 console.log(学生A.学部); // 学部は public なので、外部からアクセスできます。 30 console.log(学生A.年齢); // 年齢は readonly なので、更新はできないが読むことはできます。 31 学生A.氏名表示(); // このメソッドは private なので外部からアクセスできません。 32 学生A.学部表示(); //このメソッドは public なので外部からアクセスできます。 33 // 外部からの更新 34 学生A.氏名 = '井上'; // 氏名は private なので外部から更新できません。 35 学生A.学部 = '工学部'; // 学部は public なので外部から更新できます。 36 学生A.年齢 = 22; // 年齢は readonly なので更新できません。