プロが書く美しいコードじゃない、素人の稚拙なコードだからこそ、得られるものだってきっとある…そんな思いでコードを公開しています。どうぞ生暖かく見守ってください。

[Google Apps Script]いまさら知る基本~メソッドってドットで複数つなげられるの?!

Google Apps Scriptいまさら聞けない基本

Google Apps Scriptを使っていびつながらもなんとかプログラムを書いて、修正を重ねていくうちに、Google Apps Scriptの母体であるJavaScriptの基本のキが少しずつ見えてきました。

ちゃんと学べばおそらく最初に学ぶことでしょうし、むしろ「それ知らずにコード書いてたん?!」と無謀に思われるかも…笑

まずは、ドットの使いどころについて、メモとしてまとめます。

前回の最後、配列に収めたデータを一気にシートに書き込むコードとして、

sheet.getRange(sheet.getLastRow()+1, 1, allItemSheetinput.length, maxLength).setValues(allItemSheetinput);

を紹介しました。

私が考えたらおそらく

const sheetInputData = sheet.getRange(sheet.getLastRow()+1, 1, allItemSheetinput.length, maxLength);
sheetInputData.setValues(allItemSheetinput);

という感じにしてると思います。けれども、ChatGPTが出すコードやwebにあるサンプルコードはしばしば複数のメソッド「getRange」と「setValues」をつなげて書いたりしています。

コードを見ていれば、なんとなく同じ変数に対して複数の作業をさせたかったらドットでつなげられるんだろうな、というのは理解できます。(例:シートに色を付けて、文字の大きさを変えて、枠線を付ける)

ところが、本来そのオブジェクトには指定できないメソッドまで組み合わせられているのはどういうことでしょう??

例えばこんな例もあります。

sheet.appendRow(['フォームタイトル', form.getTitle()]).getDataRange().setBackground('lightsteelblue');

この例では、新しい行に書き込んだ「appendRow」うえでデータの入ったセル範囲を取得「getDataRange」し、背景の色を変更「setBackground」しています。

上記の例でいえば、「appendRow」「getDataRange」というのはSheetオブジェクトの中のメソッド。「setBackground」というのは、Sheetオブジェクトには適用できず、Range(セル範囲)に設定するメソッドになります。

いうなれば、Sheetオブジェクトのさらに下の階層(?)にあるイメージ。

同じ階層のメソッド同様、下の階層(?)のメソッドもつなげることができるようです。

では、つなげる順番を変えるとどうなるでしょう・・・?

sheet.appendRow(['フォームタイトル', form.getTitle()]).setBackground('lightsteelblue').getDataRange();
エラー TypeError: sheet.setValues is not a function

はい。無事エラーが吐き出されました😢
以上を踏まえて、この違いについて、ChatGPT先生に聞いてみました。

Google Apps Scriptの sheet.appendRow() メソッドは行を追加するメソッドであり、その返り値は新しく追加された行の Sheet オブジェクトであり、Sheet オブジェクトでは .setBackground() メソッドを直接呼び出すことはできません。

その「返り値(戻り値)」???

そういえば、公式リファレンスを見ると必ず、「戻り値の値」といった表現を目にします。

つまり、ものすごく雑に言うと、帰ってくる場所のこと??

つまり、オブジェクトは実行するメソッドによって帰ってくる場所がそれぞれ違う??

だから、同じ場所に帰ってくる(戻り値が同じ)メソッドはいくつでもドット「.」で繋げることができるし、戻り値が下の階層のオブジェクトなら、そのオブジェクトのメソッドが使えるようになる、と・・・。

てことは、いままでconst連発して新しい変数作成してたけど、必要なかった部分がたくさんあったのね…。(なんとなくそんな気はしてたw)

そして、このように複数のメソッドをつなげて書くことを「メソッドチェーン」と言うらしいです。おそらくJavaScriptやGoogle Apps Scriptの基本が説明された参考書であれば必ず説明されている言葉ですが、それがここにつながるとは思いもよらず…(笑)

というわけで、Google Apps Scriptにおけるドットの使いどころと「メソッドチェーン」についての雑なメモ書きでした。

コメント

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