Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2131

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

$
0
0
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でクラスに最も簡単なメソッドを追加する方法です。

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

前回のおさらい

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

function myFunction() {
  
  var Person = function(name){
    this.name = name;
  };

  var p = new Person("Bob");
  Logger.log(p);
  
  var q = new Person("Tom");
  Logger.log(q);
 
}

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

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

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

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

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

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

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

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

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

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

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

function myFunction() {
  
  var Person = function(name){
    this.name = name;
    this.greet = function(){
      Browser.msgBox(this.name + "です、こんにちは!");
    };
  };

  var p = new Person("Bob");
  Logger.log(p);
  p.greet();
  
  var q = new Person("Tom");
  Logger.log(q);
  q.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プロパティにメソッドを追加するように修正してみましょう。

function myFunction() {
  
  var Person = function(name){
    this.name = name;
  };
  
  Person.prototype.greet = function(){
    Browser.msgBox(this.name + "です、こんにちは!");
  };

  var p = new Person("Bob");
  Logger.log(p);
  p.greet();
  
  var q = new Person("Tom");
  Logger.log(q);
  q.greet();
 
}

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

まとめ

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

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

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

どうぞお楽しみに!

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

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

Viewing all articles
Browse latest Browse all 2131

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>