Part4:クラス

海未「ではクラスの話をしましょう。以前紹介したコードにこのようなものがありました」

ことり「えっと、コンストラクタ関数を使ったオブジェクトの定義だね」
海未「さすがよく覚えていますね。ES6にはもっと直接的なクラスの構文もありますが、JavaScriptでオブジェクト指向と言えばこの書き方が主流でしょう」

海未「これをTypeScriptで書き直してみます」

海未「まあそれほど大きく変わったようにも見えないと思いますが」
穂乃果「型がつくのはこれまで通りで、コンストラクタが・・・何もしてないみたいだけど」
海未「それはパラメータプロパティといって、コンストラクタの引数で自動的に自身のプロパティを初期化するものです。ですから、何も書かなくてもnameageschoolに値を代入する処理が行われています」
ことり「穂乃果ちゃん、やったね」
穂乃果「うん!」
海未「まったく・・・」

ことり「あとは・・・publicって何かな」
海未「それはアクセス修飾子といって、JavaScriptにはなかった概念ですね。先ほどのコードはすべてpublicにしていますからJavaScriptと同じ動きをしますが」

海未「このようにschoolprivateにすると、honoka.schoolのような参照がエラーになります。クラスの外側からはアクセスできなくなるのです」
ことり「クラスの外側から、っていうことは・・・」
海未「はい。hello関数からはアクセスできますから、helloの戻り値は変わりません」

海未「最後に、クラス変数とクラスメソッドを見ておきましょう」

海未「staticとついているものがクラス変数およびクラスメソッドになります。これはインスタンスではなくクラス自身が持っている変数やメソッドです」
穂乃果「Idolに対して直接呼び出してるんだよね。アイドルの人数を数えてるんだ」
海未「そうです。countをコンストラクタで1増やしていますが、この数字はIdolクラスで共有されているものです」
ことり「new Idolするたびに増えていくから、今何人いるか管理できるんだね」

海未「次回はモジュールの話です」
ことり「その前にことりイベ最終日」
海未「モ、モジュールの話です!」
穂乃果「海未ちゃん・・・今回もだめだったんだ」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です