関数したい(function)
1type Cell = string | number | boolean | Date | null;
2
3function getValues(
4 book: GoogleAppsScript.Spreadsheet.Spreadsheet,
5 sheetName: string
6): Cell[][] {
7 const sheet = book.getSheetByName(sheetName);
8
9 if (!sheet) {
10 throw new Error(`Sheet not found: ${sheetName}`)
11 }
12 return sheet.getDataRange().getValues();
13}
14
15// Usage
16const book = SpreadsheetApp.getActiveSpreadsheet();
17const values = getValues(book, "responses");
functionを使って関数を定義できます。
GASプロジェクトは、このfunctionを使った関数の集合体として作成することがほとんどです。
同じプロジェクト内で、ファイルを分けることができますが、すべてグローバルな関数として扱われるため、関数名が重複しないように気をつける必要があります。
オプションしたい
1type Cell = string | number | boolean | Date | null;
2
3// オプション用の型名を定義
4type GetDataOptions = {
5 header?: boolean;
6 limit?: number | null;
7};
8
9function getData(
10 sheet: GoogleAppsScript.Spreadsheet.Sheet,
11 options: GetDataOptions = {}
12): Cell[][] {
13
14 // オプションの初期値を設定
15 const {
16 header = true,
17 limit = null,
18 } = options;
19
20 let data = sheet.getDataRange().getValues();
21
22 if (!header) {
23 data = data.slice(1);
24 }
25
26 if (limit !== null) {
27 data = data.slice(0, limit);
28 }
29
30 return data;
31}
TS/JSでは名前付きの引数を設定することができません。 しかし、オブジェクトを引数にすることで、名前付き引数のように動作させることができます。
関数式したい
1const add = function(a, b) {
2 return a + b;
3}
関数式(function expression)は、関数を値として扱い、変数に代入する書き方です。
アロー関数したい
1const 関数名 = (引数) => 返り値;
2const add = (a, b) => a + b;
アロー関数(arrow function)は、関数式の一種で、関数を簡潔に書くための構文です。 ES6(ES2015)で導入されました。 単純な処理は、アロー関数で書くとよいみたいです。
注釈
アロー関数は独自のthisを持たない構文です。
小さな処理やコールバックでは、外側のスコープのthisを安全に使うことができます。
一方で、オブジェクトやGAS特有のthisを参照できないため、メソッドやトリガー関数には不向きです。
関数定義の構文について
JavaScriptには、歴史的な経緯から関数を定義する構文が複数あります。
まずは、基本となるfunctionを使った構文を体得すればよいと思います。
この構文は、初期のJavaScriptから存在しており、
現在のモダンな環境でも問題なく動作します。
アロー関数はES2015で導入された新しい構文です。 関数式を簡潔に書けるのが特徴で、単純な処理ではコード量を大幅に減らせます。 利用可能な環境であれば積極的に使えばよいと思います。
ただし、複雑な処理では、記述がコンパクトすぎて、かえって読みづらくなることもあると感じました。 可読性を意識して構文を使い分けるとよさそうです。