見出し画像

【英語でプログラミング学習 】”オブジェクト”ってオブジェクト指向のあれ? プログラミングの”キモ”であるObjectを理解する!

これまではちょっと文法的な話がほとんどで、あまりプログラミングの面白さを感じられなかったかもしれませんが、今回は本格的なプログラミングの話に入っていきます。ここで解説しているObjectの話はとても重要で、特に「オブジェクトって何がすごいの?」という点を理解してください。ではいつもの通り、リンクのビデオからObjectの解説を聞いて、今回は次のArrayに入るところまでです。

今回のセクションを聞いて次の点が理解できたかどうか確認してください。一発で分かればすごいことです!

✅ 今までのstringみたいな変数と、今回やるObjectと何が違う?
✅ どうしてオブジェクトを使うの?
✅ オブジェクトの中身ってどうなっているの?

99ここまで。

画像1

Objectの理解に必要な概念、propertyって?

まず冒頭、これまでにも説明した「値の種類」について、今回はReference Type(参照型)について取り上げるとして、そこにある3つのタイプを紹介してます。

画像2

Objectの他に、Array(配列)とFunction(関数)があり、そこは後で説明します。

An object in JavaScript and other programming languages is like an object .
JavaScriptや他の多くのプログラミング言語で言うObjectとは、現実世界でのObjectみたいなものです。

とは言うものの、Objectのイメージがよくわかりません。そもそもObjectは「物体」という意味。何なのでしょうそれって?

Think of a person. A person has name, age, address, and so on. 
人間を考えてみて下さい。人間には名前、年齢、住所などがあります

前ににも一度説明しましたが、ここのhaveの使い方もなかなかできません。例えば、「人間には名前があります」を英語で言ってくださいといったらどう言いますか。恐らく、There is name .... と言う人が多いと思います。There is/are構文とか言って学校で習ったために、「~がある」と言うとほぼ間違いなくこれを使ってしまいます。もちろんThere isを使わないわけではありません。

There is one critical bug in this code.

This code has one critical bug.

どちらも正解です。しかしhaveの使い方に慣れていないと、それを聞いたときにすぐに意味が頭に入ってこないこともあります。ですから基本動詞の使い方を理解しておく必要があります。これも前に紹介しましたが、拙著、『ITエンジニアが覚えておきたい英語基本動詞30』を参考にしてみてください。

話をObjectに戻すと、そういった名前や年齢のことをこう言っています。

These are the properties of a person.
これらは人のプロパティ―です。

Propertyとは「属性」という意味。属性というよりはプロパティとしてその概念を理解してください。例えば「公園」にはどんなプロパティが考えられますか

♦ 名称
♦ 場所(住所)
♦ 広さ
♦ 遊具の数
♦ 管轄自治体、などなど

こういったモノ(Object)が持っている特徴や特性、性質みたいな項目をプロパティと呼びます。世の中にある”モノ”には常にと言ってよいほどプロパティがあります。そのプロパティも「人間」や「公園」などObjectによってさまざまです。こうしたObjectとPropertyによって世の中にあるあらゆる”モノ”をプログラミングで表現しようとしたのがObjectなのです。

皆さんの頭の中でも、次のようなObjectを考えたときに、どんなプロパティが考えられるか想像してみてください。

■ 国・地域
■ 車
■ 家
■ 会社

それぞれの中に含まれているプロパティには数えきれないほどのものがあることが想像つくと思います。プログラミングではほぼ無数ともいえるプロパティをすべてあぶりだす必要あありません。例えば、中古車の販売Webサイトを作る時に車のデーターをオブジェクトで扱おうとした時、メーカーや車種、色、値段など主要なプロパティは必要です。しかし、例えば「現オーナーの人種」なんて言うプロパティも考えられますが、自動車の販売には全く関係ありません。プログラミングではあくまでの必要なプロパティだけを考えるので、実はアプリケーションによってもプロパティの種類は随分と変わってくるのです。

Objectでコードがきれいになる?

さて、Moshさんはここでpersonのオブジェクトの説明をしています。

let name = 'Mosh';
let age = 30

この2つのプロパティを、"representation of a person"(人間を表すもの)と表現しています。そして、

Instead of declaring two variables, we can declare a "person" object.
二つの変数を宣言する代わりに、personオブジェクトを宣言できます。

そしてその利点としてこう説明しています。

It makes our code cleaner.
それによってコードがきれいになります

このmakeも重要な基礎動詞の使い方です。

ではどうして”綺麗になる”のでしょう。

まず変数をオブジェクトとして宣言するには波括弧を加えます。

let person = {};

そしてこの括弧の中にプロパティをa key-value pair(キー・値のペア)として入れていきます。キーはプロパティの名前、値はまさにその値。それをコロンで区切ります。

キー名:値

personオブジェクトの場合、こうなります。

let person = {name:'Mosh', age:30};

そしてこれを改行を加えて見やすくするとMoshさんが書いたようなコードになります。

let person = {
   name:'Mosh', 
   age:30
};

では逆に汚いコードというのはどういうものか?

let personName = 'Mosh';
let personAge = 30;

そうです、nameとageにpersonを付けただけ。これって別に構わないのではと思うかもしれませんが、決定的な問題は、この二つの変数につながりが全くないということです。ここではたまたま2行続けて書かれていますが、30歳という年齢はMoshさんのものであることは何ら保証されていません。ではこうしたらどうでしょう。

let MoshName = 'Mosh';
let MoshAge = 30;

たしかにこれなら年齢はMoshさんのものだとわかります。ところが、実際に作る人間のデータは当然Moshさんだけではありません。1万人のデータをつくるのに1万人の変数を作るのですか?例えばJohnAge、TakashiAge, AshleyAge, etc. とんでもない数の変数ですよね。

ところが人をobjectで表現すると、変数の数は1つです。nameとageというプロパティを持ったpersonというオブジェクト。これを使いまわして1万人分のデータを作ることができます。もちろんデータは1万人分ですが変数は1つ。これがMoshさんがいっていたObjectの効用である「コードがきれいになる」というポイントです。

personオブジェクトが出来上がったところで、この変数をConsoleで確かめてみます。ここはビデオ通りにやってみてください。

プロパティへのアクセス方法は2つ

ではオブジェクトのプロパティを変更する場合に2つのやり方を紹介しています。例えば、先ほど作ったpersonオブジェクトで、nameを'John'に変えたい時、次の二つのやり方があります。

//Dot notation
person.name = 'John';

//Bracket notation
person['name'] = 'John';

自分でもこの二つのやり方を試してみてください。例えば、

//personオブジェクトを宣言。プロパティを初期化する。
let person = {name:'Mosh', age:30};

//nameをjohnに変更
person.name = 'Taro';

//コンソールにnameを表示させる
console.log(person.name);

//今度はageを31に変更
person['age'] = 31;

//コンソールにageを表示させる
console.log(person.age);

さてなぜ2つの方法があるか。1つめのドット方式で何も問題はないとは思いますが、実は二つ目のブラケット方法があることでとても便利になる点があります。

//personオブジェクトを宣言。プロパティを初期化する。
let person = {name:'Mosh', age:30};

//プロパティ名を変数にする
let propertyName = 'age';

//変数に入ったプロパティ名をもとにデータにアクセスする
person[proeprtyName] = 31;

アクセスプロパティ名を変数にして、それをもとにプロパティを指定することができます。これはこの場面に出くわさないとなかなか効用のイメージがわきませんが、これと同じようなことをドット方式でやろうとしてもできません。

//personオブジェクトを宣言。プロパティを初期化する。
let person = {name:'Mosh', age:30};

//プロパティ名を変数にする
let propertyName = 'age';

//!!これはエラーになる!!
person.propertyName = 31;

ただ、普段はドット方式を使ってくださいとMoshさんも言っています。ブラケット方式はその必要が出てきたら使えばよいということです。

次回はもっと面白いArray(配列)という型を解説します。

この記事が気に入ったらサポートをしてみませんか?