『GAS 完全入門』基礎④ ★☆☆ – ビジボット

ビジネス

便利なGASレシピ集!に戻る場合は以下から

便利なGASレシピ集! – [2019年最新版]

2019年5月22日

はじめに

今回のビジボットも、長期的にやっている『Google Apps Script 完全入門』を買って基礎入門③ ☆☆☆ – ビジボット』の続きを書いていきます!
今理解しようとしている部分がどんどん難しくなっているのは気のせいじゃないです。。(笑)
けど、理解できて使う様になっていくと人って簡単に覚えちゃうから不思議なんですよねぇ。。(笑)
継続って大事。GASって大事。スプレッドシートってすごく便利。。って改めて思いました。ほんと。

↓↓前回記事↓↓

『GAS 完全入門』基礎③ ★☆☆ – ビジボット

2019年2月27日

それでは早速始めていきます!

1.関数リテラル

GAS(JavaScript)にある、『関数リテラル』は通常の関数宣言とほぼ書式は同じですが、『関数名を記述しない』という点が特徴として挙げられます。
また、定義時点で名前を持たないという性質上、匿名関数だったり無名関数だったりとも呼ばれます。

関数リテラルで定義した関数は、変数に代入することができます。その代入式の事を『関数式』と言います。
関数式は変数への代入のため、ステートメントの末尾にセミコロン(;)が必要です。

ログ結果はこんな感じ。

ログ結果

これまでの関数定義は『関数名()』で呼び出しを行う事で、その関数の実行を行うというシンプルなものでしたが、関数を定義すると同時に実行する『即時関数』が存在します。

2.スコープ

GAS(JavaScript)には、記述をするフィールドでグローバル領域とローカル領域が分かれます。
グローバル関数の特徴は呼び出された関数よりも先に、グローバル領域に記述されたステートメントが実行されます。

グローバル領域

以下のコードを実行してみます。
呼び出しはmyFunction()を呼び出します。
すると、1番目、2番目、3番目という順番で呼び出しされます。
これは必ず呼び出された関数より先に呼び出されるグローバル領域の特性です。

ログ結果はこんな感じ。

ログ結果

ローカル領域

グローバル領域に記述するとローカル領域でも活用する事ができます。
ローカル領域とは通常通りfunctionの中に記述するようなフィールドを指します。ローカル変数の特徴としては宣言した変数はローカル変数内でしか使えない特徴がありますが、グローバル領域に宣言していた変数はローカル変数の中でも使えます。

例えば以下のようにmyFunction()でも使えます。

ログ結果はこんな感じ。

ログ結果

※グローバル領域への記述は必要最低限とし、特定のgsファイルの一番上のまとめますが、さまざまなプロジェクトで意図しないタイミングで呼び出されてしまったりとグローバル領域にステートメントを点在される事は可読性の面からもそこまで推奨されないみたいです

3.クラスとインスタンス化

簡単にオブジェクト指向について触れていきたいと思います。
まず、3人のプロフィールを作成すると想定して以下のコードを書いた場合、人数分の記述をしないといけません。

ログ結果はこんな感じ。

ログ結果

そのため、人を量産できるための『ひな形』を作成します!(笑)
ひな形を作成してそこから生成されたオブジェクトを『インスタンス』と言います。

new演算子

ひな形からどうやってインスタンスを生成するか?ですが、以下方法でインスタンスを生成する事ができます。
まだこの時点では情報を渡していないので、できているものは『人っぽいもの』って表現が正しいかも?(笑)

var 変数 = new コンストラクタ名 (引数1,引数2,…)

コンストラクタ

ひな型からインスタンス化する際に、最初に呼び出される関数で、生成したオブエクトの初期化処理をしてくれるという役割を持ちます。
コンストラクタを定義する書式は通常の関数と同様で定義する事が可能です。

コンストラクタのイメージとしては、newで一度リフレッシュして宣言を行う感じですね。

var コンストラクタ名 = function (仮引数1,仮引数2,…){
//処理
}

※コンストラクタ名は通常の関数名と区別するために、先頭が大文字で始めるのが一般的です。

this

オブジェクトの『ひな形』を定義した際に、『人っぽいもの』に対して情報を渡していく必要があります。その際に使用するのが『thisキーワード』です。
ログ情報の『aaaa』を都度呼び出している事が確認できる。

ログ結果はこんな感じ。

ログ結果

次に、メソッドを持つ例です。
インスタンス化の際に受け取った引き取りを元に文字数を生成して、それをmsgメソッドの戻り値として返しています。

※メソッドとは、関数が格納されたプロパティの事を指します

プロトタイプ

ログ結果はこんな感じ。

ログ結果

プロトタイプ

ひな形とインスタンス化を活用する事によって、スクリプトの再利用や可読性、メンテナンス性は上がっていきます。
しかし、インスタンス化をする事でメモリ確保の容量問題がでてきます。

インスタンス化の無駄 - ビジボット
インスタンス化の無駄 - ビジボット

この問題を解決するのが『prototypeプロパティ』という仕組みです。
『prototypeプロパティ』はひな形から生成されたインスタンスから参照する事ができるという仕組みです。

メソッドの参照 - ビジボット
メソッドの参照 - ビジボット

ログ結果はこんな感じ。

ログ結果

今回はここまでです!
色々難しい概念的なところが多くなってきました。
これは回数重ねて記述を含めやり続けて慣れないと難しいので、勉強をしながら書き方の復習を含めて練習をしたいと思います。
やっぱRPGとかがいいのかな?笑
最後までお付き合い頂き、ありがとうございました!