背景
エンジニアとしての土台を作るために、プログラミングの基礎から学習している。
現在「オブジェクト」について学習していて、そのアウトプット。
1つの記事にまとめると長くなりすぎるので、
part分けて投稿していきます!
今回は、「オブジェクトとは、classとは、thisって何」
オブジェクトって?
一言で言うと、「データと処理をひとまとめにしたモノ」をオブジェクトといいます。
現実世界のモノをコンピュータ上で再現するために「オブジェクト」という考え方を度々使います。
👇コードで書くと:Typescriptでは下記のように記述します。
// #設計図
class Vehicle {
// 1. ここで「こういう変数を持つよ」と宣言(型定義)が必須
kart: string;
tire: string;
glider: string;
// # オブジェクトを初期化するために使用される特別な種類の関数。
constructor(kart: string, tire: string, glider: string) {
// 2. ここで代入
this.kart = kart;
this.tire = tire;
this.glider = glider;
}
}
// # 設計図からものを生成する(インスタンス)
let marioVehicle = New vehicle("スタンダードカート", "ノーマルタイヤ", "スーパーカイト")
コードを元に解説
class Vehicle {
// 1. ここで「こういう変数を持つよ」と宣言(型定義)が必須
kart: string;
tire: string;
glider: string;
// # オブジェクトを初期化するために使用される特別な種類の関数。
constructor(kart: string, tire: string, glider: string) {
// 2. ここで代入
this.kart = kart;
this.tire = tire;
this.glider = glider;
}
}
classって何?🤔
class(クラス)とは、オブジェクトを定義するときに使用します。
このclass内で、"状態"と"振る舞い"をまとめて定義します。
👉一言でいうと「モノを作るための設計図」です。
ただ、設計図だけでは何もできない、実際に使えるよう実体化しないと‼️
classという設計図をもとに、モノ(オブジェクト)を生成することを インスタンス化 と呼ぶ。
設計図内にある、constructor(コンストラクタ)って何してる?
👉オブジェクトをインスタンス化ときに使用される、特別な種類の関数。
オブジェクトを生成したときに自動的に呼び出され、下記のような用途で使用される。
・オブジェクトのプロパティの初期値
・生成時の自動計算やセットアップ
(日時を記録したり、ゲームのキャラであれば生成時に登場エフェクトを出すなど)
メモ(this, selfってなに)📝
thisまたはselfなどのキーワードは現在のオブジェクトを参照するためにコンストラクタ関数内でよく使用される。通常、オブジェクトのプロパティを初期化するために使用され、コンストラクタ関数内からオブジェクトのプロパティにアクセスして変更できる。
this, selfは一言でいうと、「自分自身」を指す時に使用する。
具体的にどんな場面で使用するか、下記ようなclassの場合
class内にnameというプロパティが定義され、class内の関数setNameの引数に同じnameがあった場合、引数のnameか、プロパティのnameか判別できない。
// もし this がなかったら…?
class Character {
name: string; // 名前データ
setName(name) { // 外から渡された名前データ
name = name;
// コンピュータ:「えっ、どっちの name に どっちの name を入れるの?混乱!」
}
}
👇同じ名前のプロパティと引数だった場合でも、thisキーワードを使用すると明確になる。
・this.name オブジェクト内のプロパティname
・name 外部から渡された引数name
class Character {
name: string;
setName(name) {
// 「私の名前(this.name)」に、「渡された名前(name)」を入れる
this.name = name;
}
}
thisとselfの違い
this と self は意味は同じ
違いは、メソッドを作るときに「self: 引数に書く必要があるか(Python)」、「this: 勝手に使えるか(Java/JSなど)」だけ。