今回は「クラス」についてみていきます。
1 オブジェクト
オブジェクトにはさまざまなプロパティやメソッドを定義することができ、したがって単なる変数よりも、情報を整理して格納することができます。
しかし、次のような場合はどうでしょうか。
HTML(一部)
<script>
let tr1 = {
name : "三角形",
base : 6,
height : 8,
calcArea : function() {
return ( this.base * this.height ) / 2 ;
}
}
let tr2 = {
name : "さんかくけい",
base : 8,
height : 12,
calcArea : function() {
return ( this.base * this.height ) / 2 ;
}
}
let tr3 = {
name : "トライアングル",
base : 8,
height : 14,
calcArea : function() {
return ( this.base * this.height ) / 2 ;
}
}
let area1 = tr1.calcArea();
let area2 = tr2.calcArea();
let area3 = tr3.calcArea();
document.write("<p>" + tr1.name + "の面積は" + area1 + "です。</p>");
document.write("<p>" + tr2.name + "の面積は" + area2 + "です。</p>");
document.write("<p>" + tr3.name + "の面積は" + area3 + "です。</p>");
</script>
ブラウザ
この例では定義の時点で値を入力しています。(さらに行数が増えるのを避けるためです。)
このように3つのオブジェクトを定義してそれぞれ表示するだけでも、これだけの行数を要します。
これまで、変数や繰り返し処理など、できるだけ少ないコードで処理を行うことに努めてきましたが、このオブジェクトの定義についても何とかならないのでしょうか?
2 クラス
そこで「クラス」というものを利用します。
書式
class クラスの名前{
メソッドの名前(引数){
引数の処理
}
}
もちろん、メソッドの名前や引数は複数記述することができます。
なお、クラスは「オブジェクトを設計するもの」であるということができます。
HTML(一部)
<script>
class Tri{
constructor(name, base, height){ // ① コンストラクタ
this.name = name;
this.base = base;
this.height = height;
}
calcArea() { // ② メソッド
return ( this.base * this.height ) / 2 ;
}
}
tr1 = new Tri("三角形", 6, 8); // ③ インスタンスを生成
tr2 = new Tri("さんかくけい", 8, 12);
tr3 = new Tri("トライアングル", 8, 14);
let area1 = tr1.calcArea(); // ④ 計算結果を代入
let area2 = tr2.calcArea();
let area3 = tr3.calcArea();
document.write("<p>" + tr1.name + "の面積は" + area1 + "です。</p>");
document.write("<p>" + tr2.name + "の面積は" + area2 + "です。</p>");
document.write("<p>" + tr3.name + "の面積は" + area3 + "です。</p>");
</script>
ブラウザ
コードを少なくすることができました。
生成されたオブジェクトが3つなので大した効果がないかもしれませんが、これが何十、何百のオフジェクトを生成する場合には大きく違ってきます。
3 クラスの定義とインスタンスの生成
上から みていきます。
HTML(一部)
class Tri{
constructor(name, base, height){
this.name = name;
this.base = base;
this.height = height;
}
calcArea() {
return ( this.base * this.height ) / 2 ;
}
}
「おや?」と思われた方、その通りです。
オブジェクトではなく、constructor という特殊なメソッドで定義されていますね。
HTML(一部)
tr1 = new Tri("三角形", 6, 8);
そして、次の箇所では new クラス名 でオブジェクトを作っています。
この生成されたオブジェクトのことを インスタンス といいます。
HTML(一部)
constructor(name, base, height){
this.name = name; ①
this.base = base; ②
this.height = height; ③
}
・
・ ↑
・
tr1 = new Tri("三角形", 6, 8); ① ② ③
このインスタンスを生成する動きをわかりやすくすると上のようになります。
まず、インスタンスを生成するときに、constructor メソッドが呼び出され、引数として指定されている、① “三角形” が name に、② 6 が base に、そして、③ 8 が height にそれぞれ代入されます。
これが コンストラクタ の役割で、クラスからインスタンスを生成する際に呼び出されるメソッドです。
これらのプロパティを持つオブジェクトが tr1 となります。
メソッドについては前回説明したとおりの動きですね。
今回の例では、これが3回繰り返されます。
4 次回
さてだんだんと効率的になってきました。
次回は、さらにコードを少なくする工夫をしてみたいと思います。
カテゴリー
更新記事
- 『日本経済新聞』を読む25(モルドバ、スマートロック、バリ、二重価格、ニッチ)
- 『日本経済新聞』を読む24(FTS、焼酎、化粧水、防災ビジネス、一太郎)
- 『日本経済新聞』を読む23(人工芝、睡眠市場、東海道新幹線、地雷、酸化ガリウム)
- 『日本経済新聞』を読む22(ポータブル電源、ズワイガニ、モルディブ、リチウム、ロブスター)
- 『日本経済新聞』を読む21(高速船、駄菓子、レンタル自習室、PFAS、戻りガツオ)
- 『日本経済新聞』を読む20(書店、コネクテッドカー、アゼルバイジャン、アルメニア、服薬)
- 『日本経済新聞』を読む 19(アボカド、飼料、ビレット、電動キックボード、フレア)
- テーマ株投資(9か月)
- 『日本経済新聞』を読む 18(背徳、デフリ、シアヌークビル港、デジタルノマド、企業博物館)
- 『日本経済新聞』を読む 17(在庫、字幕、梅田、エクセル職人、耐震シェルター)
- 『日本経済新聞』を読む 16(初任給、ウイスキー、スリランカ、クジラ肉、宇宙ごみ)
- 『日本経済新聞』を読む 15(配当貴族、スマートウォッチ、底引き網、ねこ住宅、電池の冷却)
- 『日本経済新聞』を読む 14(サービス収支、つながらない、租税回避地、電池寿命、置き社食)
- 『日本経済新聞』を読む 13(鉄鉱石、内需株、画像診断、ハブ空港、LCC)
- 『日本経済新聞』を読む 12(アンチモニー、おもちゃショー、スタートアップ、燃料電池、送電)
- 『日本経済新聞』を読む 11(にがり、おせち、ダチョウ、災害ドローン、ビジネスホテル)
- 『日本経済新聞』を読む 10(航空エンジン、金型、国際会議、PCE、ゲーム機)
- 『日本経済新聞』を読む 9(家計金融資産、車載半導体、ホタテ、コンテナ、GPU)
- 『日本経済新聞』を読む 8(北陸新幹線、車中泊、ジョブ型、GPIF、メタンハイドレート)
- 『日本経済新聞』を読む 7(紙、ラストワンマイル、リユース市場、カード審査、ボルダリング)
- 『日本経済新聞』を読む 6(iPS細胞、騰落レシオ、短期プラ、REIT、フードテック)
- 『日本経済新聞』を読む 5(ナフサ、ビール、輸入牛肉、悪玉コレステロール、核融合)
- 『日本経済新聞』を読む 4(ダビンチ・サージカル・システム、ゼロエミッション船、クッキー、LBO、洋上風力発電)
- 『日本経済新聞』を読む 3(変動金利、HSP、スリープテック、双腕ロボット、物流パレット)
- 『日本経済新聞』を読む 2(DAC、株主優待、オピオイド、ベトナム車市場、離れ小島)
- 『日本経済新聞』を読む 1(リバースメンタリング、CBT、EBPM、地方創生DAO、IBD)
- テーマ株投資(7か月)
- 『会社四季報 2024年 3集 夏号』を読む 20(RPF、DtoC、ToF、駅ナカ、CX)
- 『会社四季報 2024年 3集 夏号』を読む 19(ATC、プローブカード、ニューデリー、商品CFD、SUV、FPC、IFRS)
- 『会社四季報 2024年 3集 夏号』を読む 18(シャリ玉ロボット、YAGレーザー、シナジー、SaaS、クルーズ、DFBレーザー)
タグ
break (1) class (3) collection (6) continue (1) CSS (2) DOM (2) for (1) function (3) HTML (8) if (2) JavaScript (28) object (5) pop (1) push (1) shift (1) switch (1) unshift (1) VBA (1) while (2) ことば (25) アンガーマネジメント (1) インソース (1) ココナラ (12) コーチング (1) チーズ (2) ネズミ (2) ノート (2) パーソルホールディングス (4) ブランディング (1) ブランド (1) プログリット (1) ポート (1) メモ (2) リスキリング (1) リンクアンドモチベーション (3) 変数 (3) 学習 (1) 小人 (2) 怒り (1) 新聞 (2) 株式 (30) 用語 (16) 睡眠 (3) 給水器 (1) 記憶 (3) Aoba-BBT (12) IGS (12) Kラーニング (1)