GASでゲッターを使って簡単なプロパティを作成する方法


get

photo credit: CityofStPete Cardio Tennis Class via photopin (license)

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

「初心者でもわかるGoogle Apps Scriptのクラス」についてシリーズでお伝えしています。

前回の記事はこちら。

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

データの1行分を表すクラスを作る方法をお伝えしました。

さて、クラスで定義したプロパティですが、「ゲッター」と呼ばれる別の方法で作ることができます。

ということで今回は、GASでゲッターを使って簡単なプロパティを作成する方法をお伝えします。

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

スポンサーリンク

前回のおさらい

まず、前回のおさらいです。

以下のようなスプレッドシートがあるとします。

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

各行のデータをもとにしたインスタンスを生成するクラスPersonを作りました。

こちらです。

function myFunction() {
  
  class Person {
    constructor(record) {
      [this.id, this.name, this.gender, this.birthday] = record;
    }
    
    greet() {
      Browser.msgBox(this.name + "です、こんにちは!");
    }
  }
  
  const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const p = new Person(values[1]);
  console.log(p)

  const q = new Person(values[2]);
  console.log(q);
  
}

プロパティとしては、スプレッドシートからそのままid、name、gender、birthdayを持たせました。

今回は、新たに別の方法でプロパティを追加してみたいと思います。

プロパティの値から別のプロパティを作る

例えば、男性かどうかをブール値で返すisMaleというプロパティを作りたいとします。

constructorメソッドを使用する

constructorメソッドに、genderプロパティの値を使って算出するという方法を考えることができますね。

例えば、以下のようなスクリプトです。

function myFunction() {
  
  class Person {
    constructor(record) {
      [this.id, this.name, this.gender, this.birthday] = record;
      this.isMale = (this.gender === 'male');
    }    
  }
  
  const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const p = new Person(values[1]);
  console.log(p.isMale); //true
  
}

実行結果は以下のようになります。

GASのクラスで定義したisMaleプロパティの結果

values[1]はのBobさんは「male」なので、isMaleプロパティはtrueです。

元のプロパティが変更になった場合

インスタンス生成後はこれでいいのですが、万が一genderプロパティに変更があった場合はおかしくなってしまいます。

以下を実行してみましょう。

function myFunction() {
  
  class Person {
    constructor(record) {
      [this.id, this.name, this.gender, this.birthday] = record;
      this.isMale = (this.gender === 'male');
    }
  }
  
  const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const p = new Person(values[1]);
  p.gender = 'female';
  console.log(p.gender, p.isMale);  
}

結果はこちら。

GASのisMaleプロパティが変更なし

そうなんです。genderプロパティを変更したのですが、isMaleプロパティはそのままになってしまいます。

なので、他のプロパティの値の結果で、変更が必要になるようなときは別の方法を考えないといけませんね。

ゲッターを定義する

そこで、別の方法としてゲッターによりプロパティを定義する方法を考えます。

ゲッターというのは、プロパティを定義しつつ、そのプロパティが呼び出されたときに関数を呼び出すことができるというものです。

get構文でプロパティを作る

ゲッターの定義には、以下のget構文を使います。

get プロパティ名(){
 //処理
 return 戻り値;
}

では、例を見てみましょう。

以下のようなものです。

function myFunction() {
  
  class Person {
    constructor(record) {
      [this.id, this.name, this.gender, this.birthday] = record;
    }
    
    get isMale() {
      return this.gender === 'male';
    }
  }
  
  const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const p = new Person(values[1]);
  console.log(p.gender, p.isMale);
  p.gender = 'female';
  console.log(p.gender, p.isMale);  
  
}

isMaleプロパティは呼び出されると、get構文で定義した関数が実行され、その時の「genderプロパティがmaleかどうか」をブール値で返します。

つまり、genderプロパティと連動してくれるんですね。

実行結果はこちらです。

GASのゲッターによるプロパティ

うまく動いていますね。

ゲッターによるプロパティへの代入

ちなみに、ゲッターによるプロパティには代入はできるのでしょうか?

試してみましょう。

function myFunction() {
  
  class Person {
    constructor(record) {
      [this.id, this.name, this.gender, this.birthday] = record;
    }
    
    get isMale() {
      return this.gender === 'male';
    }
  }
  
  const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const p = new Person(values[1]);
  console.log(p.gender, p.isMale);
  p.isMale = false;
  console.log(p.gender, p.isMale);
  
}

こちらを実行してみると、こうなります。

GASのゲッターによるプロパティへの上書き

エラーは出ませんが、上書きは成功しないようですね。

まとめ

以上、GASでゲッターを使って簡単なプロパティを作成する方法をお伝えしました。

他のプロパティと連動して、その内容が変更するようなプロパティはget構文によるゲッターを使うと良さそうですね。

ゲッターがあるなら「セッター」もありそうですよね…

GASでセッターを使ってプロパティの入力に制限をかける
「初心者でもわかるGoogle Apps Scriptのクラス」についてシリーズでお伝えしています。今回は、GASでset構文によるセッターを使って上書き禁止のプロパティを作る方法をお伝えします。

ということで、次回はセッターの作り方についてお伝えします。

どうぞお楽しみに!

連載目次:初心者向け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をコピーしました