関数したい(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で導入された新しい構文です。 関数式を簡潔に書けるのが特徴で、単純な処理ではコード量を大幅に減らせます。 利用可能な環境であれば積極的に使えばよいと思います。

ただし、複雑な処理では、記述がコンパクトすぎて、かえって読みづらくなることもあると感じました。 可読性を意識して構文を使い分けるとよさそうです。