GASでdefinePropertiesメソッドを使ってクラスにプロパティを定義する方法


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

「初心者でもわかるGoogle Apps Scriptでクラスを作ろう!」をテーマとしたシリーズをお送りしています。

前回の記事はこちら。

Google Apps Scriptでプライベートプロパティを取得するメソッドを作成する方法
初心者でもわかるGoogle Apps Scriptでクラスを作るシリーズをお送りしています。今回は、GASでクラスのプライベートプロパティを取得するメソッドを作成する方法についてお伝えします。

GASのクラスでプライベートプロパティを取得するメソッドを作る方法をお伝えしました。

さて、プライベートプロパティの値を取得する方法、実は別の方法があります。

それは、Object.definePropertiesメソッドを使う方法です。

ということで、今回はGoogle Apps ScriptでdefinePropertiesメソッドを使ってプロパティを定義する方法です。

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

前回のおさらい

題材としているのは以下のスプレッドシートの表です。

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

この表の各行を表すクラスPersonを作成しました。

こちらのコードです。

ご覧の通り、idについては上書きをできないようにプライベートプロパティと、その読み取り用のメソッドで実現をしました。

ですが、もう少し凝った方法がありまして、それがdefinePropertiesメソッドを使って、オブジェクトにプロパティを直接定義してしまうという方法です。

definePropertiesメソッドでプロパティを定義する

definePropertiesメソッドは、オブジェクトに新しいプロパティを定義するメソッドです。

書式は以下の通りで、指定するオブジェクトにプロパティ名1、プロパティ名2、…と複数のプロパティを定義することができます。

Object.defineProperties(オブジェクト,
 { プロパティ名1: 構成情報1 },
 { プロパティ名2: 構成情報2 },
 …
)

構成情報1、構成情報2、…というのは、以下の形式で個々のプロパティに指定するものになります。

get: function() {
 //get処理
},
set: function(value) {
 //set処理
}

「get」には、そのプロパティを取得しようとした際の処理を記述します。一般的には、プライベート変数の値をreturnする処理が含まれます。

「set」には、そのプロパティに設定しようとした際の処理を記述します。一般的には、プライベート変数の値にvalueを代入する処理が含まれます。

setとgetはそれぞれ省略することができ、その場合にはそれぞれ読み取り専用、または書き込み専用のプロパティとなります。

definePropertiesメソッドによるクラスの読み取り専用のプロパティ

では、definePropertiesメソッドを使って、クラスが持つ「id」の値について、読み取り専用にするスクリプトを見ていきましょう。

こちらです。

9行目~16行目が、プロパティの定義になります。

definePropertiesにより、プロパティidを定義していて、「get」のみ設定をしていますから、読み取り専用になるのです。

実行結果がこちらです。

GASでプロパティを読み取ったログ

20,22行目でidプロパティの読み取りを行っていますが、これは普通に出力されています。

一方で、21行目でプロパティidに書き込みをトライしていますが、その上書きはされておらず、初期状態の値がログ出力されていることがわかりますね。

まとめ

以上、GASでdefinePropertiesメソッドを使ってクラスにプロパティを定義する方法をお伝えしました。

前回紹介した、コンストラクタ内にメソッドを定義するよりも、わかりやすくなり、可読性も上がったのではないかと思います。

どうぞ活用くださいね。

次回は、コンストラクタをメイン処理の外に出して即時関数化していきます。

Google Apps Scriptで即時関数にクラスを定義する理由とその方法
「初心者向けGoogle Apps Scriptでクラスを作る!」シリーズをお伝えしています。今回は、GASで即時関数にクラスを定義する理由とその方法についてお伝えします。スコープとthisが重要な役割を果たします。

どうぞお楽しみに!

連載目次:初心者向け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. Google Apps Scriptのクラスでプライベートプロパティを作成する方法
  7. Google Apps Scriptでプライベートプロパティを取得するメソッドを作成する方法
  8. GASでdefinePropertiesメソッドを使ってクラスにプロパティを定義する方法
  9. Google Apps Scriptで即時関数にクラスを定義する理由とその方法
  10. Google Apps Scriptでスプレッドシートの表をインスタンス配列化する方法
  11. Google Apps Scriptでデータの集合を表すクラスを作成する方法
  12. Google Apps Scriptで自作オブジェクトについてプロパティを追加・削除するメソッドの作り方
  13. Google Apps Scriptでオブジェクトに直接追加しているプロパティだけループする方法
  14. GASでselfを使って関数の中からインスタンスを表すthisを使えるようにする方法
  15. GASでオブジェクトのデータをスプレッドシートに反映させるメソッドの作り方

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント

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