Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法


prototype

photo credit: over 14 MILLION views Thanks SIA-7B prototype Italian plane 1917 NARA111-SC-14309-ac via photopin (license)

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

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

前回の記事はこちらです。

Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズでお伝えしております。今回はGASのクラスに最も簡単なプロパティを追加する方法です。thisキーワードの意味も解説します。

GASのクラスにプロパティを追加する方法をお伝えしました。

プロパティが追加できたので、今度はメソッドですね。

ということで、今回はGoogle Apps Scriptでクラスに最も簡単なメソッドを追加する方法です。

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

前回のおさらい

では、前回のおさらいからです。

クラスPersonに、nameプロパティを追加しました。そして、コンストラクタが呼び出されたときに受け取る引数を、nameプロパティに格納するようにしています。

コンストラクタ内で使用されているthisキーワードは、生成されたインスタンス自身を表すんでしたね。

今回は、メソッドを追加していきますよ!

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

さて、クラスPersonにメソッドを追加していきます。

で、ちょっと以下の記事を見て思い出してほしいのですが、オブジェクトのプロパティには関数を格納することもできました。

そして、その場合は、プロパティとは言わずにメソッドというんでしたね。

【初心者向け】Google Apps Scriptでクラスを理解するためのオブジェクトの基礎知識
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマに、その使い方と便利さについてお伝えしていきます。今回は、GASでクラスを理解するためのオブジェクトの基礎知識についてお伝えしていきます。

ということは、メソッドを追加するには、コンストラクタ内にインスタンスのプロパティへ関数を代入する処理を追加すればいいんです。

クラスにメソッドを追加したスクリプト

以下のスクリプトのように、greetメソッドを追加しました。

コンストラクタPersonの中に、greetプロパティに、メッセージダイアログを表示する関数を格納します。

その場合、greetメソッドになるわけですね。

そして、メッセージとして表示する内容に、インスタンス自身thisのnameプロパティを使っています。

では、実行してみましょう。

クラスに追加したメソッドで表示したダイアログ

この図は「Bob」のgreetメソッドですが、「OK」をクリックすれば、続いて「Tom」のgreetメソッドも実行されますよ。

そして出力されたログがこちらです。

生成されたインスタンスの出力したログ

インスタンスpとインスタンスqそれぞれにメソッドが追加されていることが確認できますね。

prototypeプロパティにメソッドを追加する

それぞれにメソッドが追加…

つまり、図にするとこういう状態ですね。

それぞれのインスタンスにメソッドを追加

なんか、ちょっともったいなくありません?

プロパティの値はインスタンスが異なったら別の値が入ると予想されますから、別に気になりませんが、メソッドの内容は同じなのに、インスタンスが生成されればされるだけコピーされちゃいます。

メモリがもったいない!

どこか一箇所にメソッドを定義しておいて、それをすべてのインスタンスで使いまわしちゃいたい!

そんな願いを叶えるのが、プロトタイプという仕組みです。

プロトタイプとは

GASのすべてのクラスは、prototypeプロパティという特別なプロパティを持ちます。

デフォルトでは空のオブジェクトとなっていますが、そこにメンバーを追加することができます。

メソッドを追加するなら、以下のような書式になります。

クラス名.prototype.メソッド = function()(仮引数1, 仮引数2,…){
 //処理
}

インスタンスについてメソッドが呼び出された際、インスタンス内にそのメソッドが見当たらないときには、prototypeプロパティの内部を参照して呼び出すことができるという仕組みです。

図にすると、以下のようになりますね。

プロトタイプの仕組み

GASでは、コンストラクタで個別のインスタンスにメソッドを追加することをせずに、prototypeプロパティに追加するのが一般的ですね。

プロトタイプにメソッドを追加したスクリプト

では、先ほどのスクリプトについて、クラスPersonのprototypeプロパティにメソッドを追加するように修正してみましょう。

実行すると、先ほどと同様にメソッドが呼び出せていることを確認できるはずです。

まとめ

以上、Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法をお伝えしました。

プロトタイプという仕組みprototypeプロパティを使ったメソッドの追加の方法をぜひマスターくださいね。

では、次回からスプレッドシートのデータをクラス化していきたいと思います。

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

どうぞお楽しみに!

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