オブジェクト

オブジェクトとは

オブジェクトは「物」や「対象」という意味ですが、
プログラミングの世界では情報(属性)や機能を持ったデータの集合体という意味になります。
配列もオブジェクトの一種になります。

本章ではJavaScriptの「オブジェクト指向」の入り口にあたる部分について解説していきます。
「オブジェクト指向」というと難しく見えてしまい、できれば避けたいと思うかもしれませんが、
GASの各サービスはこのオブジェクトの仕組みに忠実に構成されています。

つまり、JavaScriptのオブジェクトの仕組みが理解できているのとそうでないのとでは、これからのJavaScriptとGASの習得スピードと理解度に明らかな差が出てきます。

プロパティとメソッドとは

オブジェクトはプロパティと呼ばれるデータを持つことができます。
プロパティは属性とも呼ばれ、データを管理する役割を果たすことができます。

プロパティを理解するために、まずはオブジェクトの書式について確認してみましょう。
オブジェクトは次のようなプロパティと値の組み合わせのデータの集合体です。
以下のようなデータの集合体をJSON(JavaScript Object Notation)といいます。

{
  プロパティ1:値1,
  プロパティ2:値2
}

プロパティに設定した値は以下のようにして取得することができます。

オブジェクト名.プロパティ

実際にJSONを作ってみましょう。次の例は学業の成績データをオブジェクトにしてみました。
成績データ(result)は各科目の点数を格納しており、
国語(japanese)・数学(math)・英語(english)の点数を持っています。

function object_1() {
  var result = {
    japanese: 100,
    math: 80,
    english: 90
  }
  console.log(result.japanese);
  console.log(result.math);
  console.log(result.english);
}

100
80
90

プロパティは変数と同様に再代入することができます。
次の例は成績データ(result)の国語(japanese)に0を再代入しています。

function object_2() {
  var result = {
    japanese: 100,
    math: 80,
    english: 90
  }
  console.log(result.japanese);
  result.japanese = 0;
  console.log(result.japanese);
}

100
0

おそらく、プログラミング初心者にとってはオブジェクト名.プロパティという記法が難しく感じられるかもしれません。
そのような時は、.に置き換えるとしっくりくると思います。
例えば、先程の例の成績データ(result)の国語(japanese)の点数を取得する際にresult.japaneseとコーディングしましたが、
resultのjapanaseと置き換えるとどうでしょう?
こうすると、成績データ(result)の国語(japanese)と読めるようになると思います。

実は、JSONにはオブジェクトの値として関数を持たせることができます。
このように、オブジェクトの要素として関数を指定した場合は、その要素をプロパティとは呼ばずに メソッド と呼びます。
以下のような要素がオブジェクトに含まれていれば、それがメソッドとなります。

メソッド: function(仮引数1, 仮引数2, ...) {
  // 処理
  return 戻り値;
}

メソッドとは、関数が格納されたプロパティのことです。

プロパティを呼び出す場合と同様に、メソッドは以下のようにして呼び出すことができます。
メソッドは関数のため、いくつかの引数を持つこともできます。

オブジェクト名.メソッド(引数1, 引数2)

では、下記のサンプルで確認していきましょう。myGreetオブジェクトのsayHelloというメソッドを用意して呼び出しています。

var myGreet = {
  sayHello: function() {
    return 'Hello!';
  }
}
function outputObj_1() {
  console.log(myGreet.sayHello());
}

Hello!

つまり、オブジェクトは 「情報」としてのプロパティ だけでなく、「機能」としてのメソッド を持つことができるのです。
なお、プロパティとメソッドを総じて、オブジェクトの メンバー と呼びます。

オブジェクトは、メンバーとしてプロパティとメソッドを持つことができます。

メソッドの代入と追加

プロパティと同じく、メソッドも次のように代入することができます。オブジェクトに存在しないメソッドを代入すると、メソッドの追加になります。

オブジェクト名.メソッド = function(仮引数1, 仮引数2, ...) {
  // 処理
  return 戻り値;
}

myGreetオブジェクトにsayGoodByeメソッドを追加する処理を加えたものが次のサンプルです。
実行すると、ログには「Good bye!」も出力され、追加したsayGoodByeメソッドが動作していることが確認できます。

var myGreet = {
  sayHello: function() {
    return 'Hello!';
  }
}
myGreet.sayGoodBye = function() {
  return 'Good bye!'
}
function outputObj_2() {
  console.log(myGreet.sayHello());
  console.log(myGreet.sayGoodBye());
}

Hello!
Good bye!