かずきち。の日記

サーバサイドエンジニアのつぶやき

GASで変数をグローバルの変数に設定して、変数の引き継ぎを行ってブレークポイントを見てみよう

GASの質問をいただきました

f:id:kazukichi_0914:20210925162625p:plain

「form.gsで定義したtextをmain.gsでも再利用したい」

という質問です。GoogleAppsScriptでは変数をどのようにグローバルに持てばいいのでしょうか?
例えば、コード1で定義したperson = '大島優子'をコード2で呼び出して実行しようとすると

f:id:kazukichi_0914:20210925165541g:plain

f:id:kazukichi_0914:20210925163535g:plain

personは定義してないから使えないよ!と怒られます。

それそうですよね。personはコード1でしか宣言していないので、コード2から呼び出そうとしても無理です。

変数を複数のコード間で共有したい

例えばコード.gsでperson = '大島優子';と宣言してみます。

f:id:kazukichi_0914:20210925165541g:plain

myFunction内でpersonを定義しているので、コード1のmyfunctionの中でしかpersonは有効ではないです。
ではどうすれば、gunction2へ他のスクリプトに変数を引き渡せるの?

function外で変数を定義することです

先程の「大島優子」のサンプルに戻りましょう

もしも大島優子をmyFunction外で定義します。

f:id:kazukichi_0914:20210925170027g:plain

コード1でfunctionが始まる前にpersonを宣言してみました。
するとコード2でもpersonという変数が使用できます。

f:id:kazukichi_0914:20210925170228g:plain

するとperson='大島優子'が引き継がれます。

これは変数を定義している場所が重要です。

これは子供が「お母さん」って呼ぶのに似ています。

f:id:kazukichi_0914:20210925170449g:plain
引用:
https://www.irasutoya.com/2019/12/blog-post_239.html

変数を共有するのは「子供がお母さん」って呼ぶのに似ているんです。
家の中で子供が「お母さんー!!」って読んだら、自分のお母さんが振り返ってくれます。

でも新宿駅で子供が「お母さんー!!」って叫んだら、他の人も振り返りますよね?
f:id:kazukichi_0914:20210925170449g:plain
f:id:kazukichi_0914:20210925170449g:plain
f:id:kazukichi_0914:20210925170449g:plain

なんででしょう?それは誰のお母さんかわからないからです。
もしかしたら田中家で「お母さん」と言ったら…田中〇〇さん1人だけです。
でも    日本全国で「お母さん」と言ったら…複数人います。

プログラミングでも同様のことが言えて、他のfunction内で関数を共有したいのであれば、

その変数をどこで定義するのかが大事です

会社で複数人でコードを書いて、変数を共有しているときは変数を定義している領域が大事になってくるわけです。

これでも解決しない場合

f:id:kazukichi_0914:20210925171749g:plain

ファイルを上に移動をしないといけないケースがあります。
上から順次実行されるので、実行順序を変えると解決する場合があります。

ブレークポイントを設定して変数に何が入っているか確認する。

プログラミングをしていると、どこの行数で変数に何が入っているかパニックになります。
そのためにはブレークポイントを設定して、その時の変数状況を確認するとスムーズにコーディングができます。

f:id:kazukichi_0914:20210925172727g:plain

途中段階を知りたい行数番号をダブルクリックすると、ローカル変数には今何が入っていますという確認ができますので、ぜひ使ってみてください。