Что такое аргументы функций и зачем они нужны?
Аргументы функций – это значения, которые передаются в функцию при её вызове. Они позволяют сделать функции более гибкими и универсальными, позволяя им оперировать разными данными и выполнять различные действия в зависимости от переданных аргументов. Без аргументов, функция была бы ограничена в работе с фиксированным набором данных и не могла бы адаптироваться к различным сценариям использования. Аргументы позволяют параметризировать поведение функции.
Обзор синтаксиса функций с аргументами в Google Apps Script
В Google Apps Script (GAS) синтаксис определения функций с аргументами выглядит следующим образом:
/**
* Описание функции.
*
* @param {тип_аргумента1} имя_аргумента1 Описание аргумента1.
* @param {тип_аргумента2} имя_аргумента2 Описание аргумента2.
* @return {тип_возвращаемого_значения} Описание возвращаемого значения.
*/
function имяФункции(имя_аргумента1, имя_аргумента2) {
// Тело функции, использующее аргументы.
return результат;
}
Например:
/**
* Складывает два числа.
*
* @param {number} a Первое число.
* @param {number} b Второе число.
* @return {number} Сумма двух чисел.
*/
function add(a, b) {
return a + b;
}
let sum = add(5, 3); // sum будет равно 8
Типы аргументов, поддерживаемые в Google Apps Script
Примитивные типы данных (числа, строки, логические значения)
Google Apps Script поддерживает передачу в функции примитивных типов данных, таких как:
number: Числа (целые и с плавающей точкой).
string: Строки.
boolean: Логические значения (true или false).
null: Представляет отсутствие значения.
undefined: Значение не определено.
Пример:
/**
* Форматирует строку, добавляя префикс и суффикс.
*
* @param {string} str Исходная строка.
* @param {string} prefix Префикс.
* @param {string} suffix Суффикс.
* @return {string} Отформатированная строка.
*/
function formatString(str, prefix, suffix) {
return prefix + str + suffix;
}
let formatted = formatString("Hello", ""); // formatted будет равно ""
Объекты (массивы, даты, объекты Google Apps Script)
Функции GAS могут принимать объекты в качестве аргументов. Это включает в себя массивы, даты и объекты, предоставляемые самим Google Apps Script (например, Spreadsheet, Document, MailApp).
Пример работы с массивом:
/**
* Вычисляет сумму элементов массива.
*
* @param {number[]} arr Массив чисел.
* @return {number} Сумма элементов массива.
*/
function sumArray(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
let numbers = [1, 2, 3, 4, 5];
let total = sumArray(numbers); // total будет равно 15
Пример работы с объектом Date:
/**
* Форматирует дату в строку.
*
* @param {Date} date Объект Date.
* @return {string} Отформатированная дата.
*/
function formatDate(date) {
return Utilities.formatDate(date, Session.getTimeZone(), 'yyyy-MM-dd');
}
let today = new Date();
let formattedDate = formatDate(today); // formattedDate будет равно текущей дате в формате yyyy-MM-dd
Функции как аргументы (callback-функции)
Google Apps Script поддерживает передачу функций в качестве аргументов другим функциям. Это позволяет реализовать паттерн callback, когда одна функция вызывает другую функцию, переданную ей в качестве аргумента, для выполнения определенной задачи.
Пример:
/**
* Выполняет операцию над каждым элементом массива и возвращает новый массив с результатами.
*
* @param {number[]} arr Исходный массив.
* @param {function(number): number} callback Функция, применяемая к каждому элементу массива.
* @return {number[]} Новый массив с результатами применения callback-функции.
*/
function mapArray(arr, callback) {
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]));
}
return result;
}
/**
* Удваивает число.
*
* @param {number} x Число.
* @return {number} Удвоенное число.
*/
function double(x) {
return x * 2;
}
let numbers = [1, 2, 3];
let doubledNumbers = mapArray(numbers, double); // doubledNumbers будет равно [2, 4, 6]
Передача аргументов в функции Google Apps Script
Передача по значению и по ссылке: особенности Google Apps Script
В Google Apps Script, примитивные типы данных (числа, строки, логические значения) передаются по значению. Это означает, что функция получает копию значения, и изменение этого значения внутри функции не влияет на исходную переменную. Объекты же передаются по ссылке. Функция получает ссылку на объект, и изменение объекта внутри функции отразится на исходном объекте.
Пример:
function modifyValue(x, obj) {
x = 10;
obj.value = 20;
}
let a = 5;
let b = { value: 15 };
modifyValue(a, b);
// a останется равным 5, так как передается по значению
// b.value станет равным 20, так как объект передается по ссылке
Использование оператора `…` для передачи переменного числа аргументов
Оператор ... (rest operator) позволяет функции принимать переменное число аргументов. Эти аргументы будут собраны в массив внутри функции.
Пример:
/**
* Суммирует переменное число аргументов.
*
* @param {...number} numbers Переменное число чисел.
* @return {number} Сумма чисел.
*/
function sumAll(...numbers) {
let sum = 0;
for (let number of numbers) {
sum += number;
}
return sum;
}
let total = sumAll(1, 2, 3, 4, 5); // total будет равно 15
Работа с необязательными и именованными аргументами
Реализация необязательных аргументов с использованием `if` и значений по умолчанию
В Google Apps Script нет встроенной поддержки необязательных аргументов, как в некоторых других языках. Однако, это можно эмулировать с помощью if и проверки на undefined, или используя значения по умолчанию.
Пример:
/**
* Умножает два числа. Второй аргумент необязательный (значение по умолчанию - 1).
*
* @param {number} a Первое число.
* @param {number} [b=1] Второе число (необязательный).
* @return {number} Произведение двух чисел.
*/
function multiply(a, b) {
if (b === undefined) {
b = 1; // Значение по умолчанию
}
return a * b;
}
let result1 = multiply(5, 2); // result1 будет равно 10
let result2 = multiply(5); // result2 будет равно 5 (5 * 1)
Эмуляция именованных аргументов с помощью объектов
Именованные аргументы, как и необязательные, не поддерживаются напрямую. Однако, можно передавать аргументы в виде объекта, где ключи объекта будут представлять имена аргументов.
Пример:
/**
* Создает HTML-элемент с заданными атрибутами.
*
* @param {Object} options Объект с атрибутами элемента.
* @param {string} options.tag Имя тега (обязательный).
* @param {string} [options.id] ID элемента (необязательный).
* @param {string} [options.class] Класс элемента (необязательный).
* @return {string} HTML-элемент.
*/
function createHTMLElement(options) {
let tag = options.tag;
let id = options.id || '';
let className = options.class || '';
let html = '';
html += '' + tag + '>';
return html;
}
let element = createHTMLElement({ tag: 'div', id: 'myDiv', class: 'container' });
// element будет равно ''
Примеры использования аргументов функций в Google Apps Script
Чтение данных из Google Sheets с использованием аргументов для указания диапазона
/**
* Считывает данные из Google Sheets в заданном диапазоне.
*
* @param {string} spreadsheetId ID таблицы Google Sheets.
* @param {string} sheetName Название листа.
* @param {string} range Диапазон ячеек (например, "A1:B10").
* @return {any[][]} Двумерный массив с данными из таблицы.
*/
function readDataFromSheet(spreadsheetId, sheetName, range) {
let spreadsheet = SpreadsheetApp.openById(spreadsheetId);
let sheet = spreadsheet.getSheetByName(sheetName);
let dataRange = sheet.getRange(range);
let values = dataRange.getValues();
return values;
}
// Пример использования:
// let data = readDataFromSheet("YOUR_SPREADSHEET_ID", "Sheet1", "A1:C5");
Отправка email-сообщений с использованием аргументов для указания получателя, темы и тела
/**
* Отправляет email-сообщение.
*
* @param {string} recipient Адрес получателя.
* @param {string} subject Тема письма.
* @param {string} body Тело письма.
* @param {object} options Дополнительные параметры отправки.
*/
function sendEmail(recipient, subject, body, options = {}) {
MailApp.sendEmail(recipient, subject, body, options);
}
// Пример использования:
// sendEmail("user@example.com", "Тема письма", "Текст письма");
Создание пользовательских диалоговых окон с динамическим контентом, передаваемым через аргументы
/**
* Отображает пользовательское диалоговое окно с заданным сообщением.
*
* @param {string} title Заголовок диалогового окна.
* @param {string} message Сообщение в диалоговом окне.
*/
function showCustomDialog(title, message) {
let ui = SpreadsheetApp.getUi();
let result = ui.alert(
title,
message,
ui.ButtonSet.OK
);
}
// Пример использования:
// showCustomDialog("Внимание", "Произошла ошибка!");