Google Apps Scriptで自作オブジェクトについてプロパティを追加・削除するメソッドの作り方


add-remove

photo credit: wuestenigel Colorful kids abacus via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズ連載をお送りしております。

前回の記事はこちら。

Google Apps Scriptでデータの集合を表すクラスを作成する方法
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにお送りしております。今回は、GASでスプレッドシートのデータの集合を表すクラスを作成する方法をお伝えしていきます。

スプレッドシートのデータ行の集合を表すクラスPersonsを作成しました。

今回は、そのPersonsクラスにメソッドを追加していきますよ。

ということで、Google Apps Scriptで自作オブジェクトについてプロパティを追加・削除するメソッドの作り方です。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

まず、題材としているスプレッドシートですが、こちらになります。

スプレッドシートのテーブル

この各行を表すクラスPersonを以下のようにつくりました。

(function(global){

  var Person = function(record){
    var _id = record[0];
    this.name = record[1];
    this.gender = record[2];
    this.birthday = record[3];
    
    Object.defineProperties(this, {
      id: {
        get: function(){
          return _id;
        }
      }
    });
  };
  
  Person.prototype.greet = function(){
    Browser.msgBox(this.name + "です、こんにちは!");
  };
  
  Person.prototype.log = function(){
    Logger.log('%s|%s|%s|%s|', this.id, this.name, this.gender, this.birthday);
  };

  global.Person = Person;

})(this);

このクラスから生成するPersonクラスは、前述のスプレッドシートの一行分を表すものですから、表全体を表すのはその集合となります。

それで作成したのが、以下のPersonsクラスです。

(function(global){

  var Persons = function() {

    var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
    values.shift();
    
    for(var i = 0; i < values.length; i++){
      var p = new Person(values[i]);
      this[p.id] = p;
    }      
  };
  
  global.Persons = Persons;

})(this);

スプレッドシートの見出し以外のデータ行について、Personクラスを生成します。

そしてそれらを、idをプロパティ、インスタンスのPersonオブジェクトを値としてオブジェクト形式で持つようにしました。

その確認用の関数myFunctionがこちらですね。

function myFunction() {  
  
  var persons = new Persons();
  for(var id in persons){
    persons[id].log();
  }      
    
}

今回は、このPersonsクラスにインスタンスの追加と削除をするメソッドを追加していきますよ。

自作クラスにメソッドを追加する

クラスにメソッドを追加するには、以下の記事でお伝えしたとおり、コンストラクタのprototypeプロパティに追加していくんでしたね。

Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法
「初心者でもわかるGoogle Apps Scriptのクラスを作ろう!」のシリーズをお送りしています。今回はGASでクラスに最も簡単なメソッドを追加する方法です。プロトタイプについても解説していますよ。

オブジェクトに新しいプロパティを追加するメソッド

Personsオブジェクトに、新しいPersonオブジェクトを作成してプロパティとして追加するaddメソッドとを作成しました。

こちらです。

  Persons.prototype.add = function(record){
    var p = new Person(record);
    this[p.id] = p;
    return this[p.id];
  };

addメソッドで受け取った仮引数recordを元に、Personクラスのインスタンスを生成して、それをPersonsオブジェクト自身にidをプロパティとして追加するというものですね。

ちなみに、recordはid,name,gender,birthdayを要素として持つ配列ですね。

オブジェクトから指定のプロパティを削除するメソッド

今度は、Personsオブジェクトから、指定したidのPersonオブジェクトを削除するremoveメソッドです。

オブジェクトからプロパティを削除するには、delete演算子を使いますね。

delete オブジェクト[プロパティ]

それを使って作成したdeleteメソッドがこちらです。

  
  Persons.prototype.remove = function(id){
    delete this[id];
  };

プロパティを追加・削除するメソッドの動作確認

では、Personsオブジェクトにプロパティを追加するメソッド、およびPersonsオブジェクトからプロパティを削除するメソッドの動作確認をしていきましょう。

検証用の関数myFunctionはこちら。

function myFunction() {  
  
  var persons = new Persons();
  persons.add(['a04', 'Jay', 'male', new Date('1995/7/7')]);
  persons.remove('a01');
  Logger.log(persons);
  
//  for(var id in persons){
//    persons[id].log();
//  }      
    
}

8~10行目がコメントアウトされているのは…ちょっと意味がありますので、それについては後日解説します。

それで、検証としては6行目に以下のようにブレークポイントを置いて、虫アイコンによる「デバッグ実行」を使ってみようと思います。

ブレークポイントを置いてデバッグ実行

デバッグ実行をするとブレークポイントで止まりますので、その時点でpersons→a04と開いていくと、以下のように内容を確認できます。

ブレークポイントでプロパティの追加と削除を確認する

a04プロパティの追加と、a01削除のプロパティを確認できましたね。

まとめ

以上、Google Apps Scriptで自作オブジェクトについてプロパティを追加・削除するメソッドの作り方をお伝えしました。

追加するプロパティに値を代入すれば追加、削除はdelete演算子ですね。

次回は、Personsクラスについてループを回すときに困ったことが起こるので、その点を解決していきます。

Google Apps Scriptでオブジェクトに直接追加しているプロパティだけループする方法
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズでお送りしています。今回は、GASでオブジェクトに直接追加しているプロパティのみをループする方法をお伝えします。

どうぞお楽しみに!

連載目次:初心者向けGoogle Apps Scriptでクラスを作ろう

使いどころやそのメリットが分かりづらいGASの「クラス」。本シリーズでは、初心者でもわかるように「これでもか!」とじっくり着実にクラスとそのメリットについて解説をしていきます。
  1. 【初心者向け】Google Apps Scriptでクラスを理解するためのオブジェクトの基礎知識
  2. 初心者でもできるGoogle Apps Scriptで最も簡単なクラスを作る方法
  3. Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法
  4. Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法
  5. Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法
  6. GASでゲッターを使って簡単なプロパティを作成する方法
  7. GASでセッターを使ってプロパティの入力に制限をかける

タイトルとURLをコピーしました