JavaScript:お手伝いしているプログラミングスクールで聞かれた質問【オブジェクトって何?】

JavaScript:お手伝いしているプログラミングスクールで聞かれた質問【オブジェクトって何?】

JavaScript:お手伝いしているプログラミングスクールで聞かれた質問【オブジェクトって何?】

プログラミングスクールの生徒さんといろいろお話している中で出てきた『よく理解できなかった事』について、この際まとめておこうの第三弾。
具体的にはこんな内容です。

  1. let と const と var は何が違うの?
  2. functionって何?ある時とない時で何が違うの?
  3. オブジェクトは { } で囲われているというけど、function(){ } の { } の中もオブジェクトなの? <= 今回はここ
  4. this. ってどこを指しているの?
  5. JavaScriptとJavaは同じなの?

function(){ } の { } の中もオブジェクトなの?

この質問の答えは…同回答すればいいか難しいですね。
{ }の中がオブジェクトなのではなく、functionで宣言された独自関数そのものがオブジェクトです。
ここら辺を理解していくには、まず「オブジェクトって何?」を考える必要があります。

オブジェクトの定義について

オブジェクトという単語はプログラミングを行っていると必ず出てくる言葉です。
そもそもオブジェクトって何?という点については先に英語のオブジェクトの意味をとらえるとわかりやすいです。

「object」の翻訳 By Google先生
▼名詞

  • 物体 object, body
  • 対象 target, object
  • 物 object, thing, stuff
  • 体 body, form, substance, object, organism, keeping in mind
  • 客体 object
  • 趣旨 meaning, object
  • 目当て guide, purpose, view, object
  • 意 intent, attention, wish, purpose, consideration, object
  • 当て aim, expectation, hope, object
  • 対象体 object
  • 目的語 object

▼動詞

  • 異なる differ, vary, disagree, contradict, oppose, object
  • 反対する object, oppose, resist

物体/対象/物/体とマテリアル(物質)な内容が並びます。というか、objectに動詞の活用があるなんて知らなかった…。

では次にオブジェクトの定義を見てみます。

オブジェクトとは関連のあるデータと機能の集合です。(機能はたいていは変数と関数で構成されており、オブジェクトの中ではそれぞれプロパティとメソッドと呼ばれます。)出典:https://developer.mozilla.org/

まだ「何となく理解した」という域を抜けない感じですね。
ポイントは【関連のある】という箇所です。これに英語の意味としての物体を掛け合わせて考えてみます。

  • 関連のあるデータと機能が集合した物体
  • 物体に関連のあるデータと機能の集合

私流の理解で補足してみます。プログラムの提供する成果物は『データそのもの』や『画面表示』です。これら成果物(最終とは限らない)を提供するスクリプト群をオブジェクトといいます。

オブジェクト = 求められている『何か』を提供するコードの一群

どうでしょう、少し明瞭になってきたでしょうか。

具体例でオブジェクトをつかむ

functionの説明で書いたのと同じコードです。
と考えてスクリプトを眺めてみます。

1行目:let num = 0; 変数の宣言ですが、これは変数を提供する機能と言い換えることができます。
2行目:console.log(test()); これはログにtest()の結果を記載する機能を提供しています。が、呼び出しているだけで単独では成立しません。
7行目~:function test() { … } numに応じた値を返す機能を提供しています。

『オブジェクト』と『オブジェクト型』って違うの?

ここらの混乱が「???」の続く理由になっていたりします。上の具体例を基に明確にしていきましょう。

  • 1行目:変数num はオブジェクトですがオブジェクト型ではありません(プリミティブ型です)
  • 2行目:関数式であってオブジェクトではありません(+ / - などと同じととらえていればOKです)
  • 7行目~:オブジェクトです

スクリプトを記載していくと(混乱を避けるため?)表現を固定化していくことが多々あります。

分類上はオブジェクトでも変数(1行目)のことを「オブジェクト」と表現する方は殆どいません。
変数そのものを「そのオブジェクト」という場合は大抵「オブジェクト型の変数」という意味です。ちなみに、オブジェクト型の変数はこんな姿で提供されます。

オブジェクト型だけでなく『オブジェクト指向』なんて言葉も出てきます。オブジェクト大渋滞ですね。

オブジェクト指向とは?

リモコンの例がよく出てきますよね。

テレビリモコンの数字ボタンを押すと赤外線送信機から信号が送られます。
これを受信側のテレビが理解して受信した波長に合わせたチャンネルに変更し表示を切り替えます。

この一連の流れを1個のオブジェクトと表現することもできます。
しかし、オブジェクト指向とした場合これを少し細分化します。(長くなるのでテレビ側は無視します。)

  1. リモコンボタンを押すと赤外線送信機から信号が出る
  2. 送信する信号はボタンによって異なる

出てくる信号は異なりますが「ボタンを押すと赤外線信号が出る」という項目はすべてのボタン共通の項目です。
こういった共通項目を一纏め(オブジェクト)としてプログラムをくみ上げていく考え方のことをオブジェクト指向といいます。

オブジェクト指向についてはこれくらいにしておきます(長くなったので)。
知見を深めたい方はココココの説明がわかりやすくて良いと思います。

まとめ

その他JavaScriptについて受けた質問については個々まとめて行きます。

  1. let と const と var は何が違うの?
  2. functionって何?ある時とない時で何が違うの?
  3. オブジェクトは { } で囲われているというけど、function(){ } の { } の中もオブジェクトなの?<=【今回の内容】
  4. this. ってどこを指しているの?
  5. JavaScriptとJavaは同じなの?