Google Apps Script:
Рефакторинг

Як це зробити:

У Google Apps Script поширеним сценарієм, що виграє від рефакторингу, є спрощення громіздких сценаріїв, які взаємодіють із Google Sheets або Docs. Спочатку сценарії можуть бути написані швидко і без особливої уваги до деталей, щоб швидко отримати результат. З часом, коли сценарій розростається, він стає незручним у використанні. Давайте розглянемо приклад рефакторингу для кращої зрозумілості та ефективності.

Оригінальний сценарій:

function logSheetNames() {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for (var i = 0; i < sheets.length; i++) {
    Logger.log(sheets[i].getName());
  }
}

Ця функція логує назву кожного аркуша у Google Spreadsheet. Хоча вона працює добре, вона використовує застарілі практики JavaScript і не має чіткості.

Рефакторингований сценарій:

function logSheetNames() {
  const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  sheets.forEach(sheet => Logger.log(sheet.getName()));
}

У рефакторингованій версії ми перейшли на використання const для змінних, які не змінюються, роблячи наш намір яснішим. Ми також використали метод forEach, сучасніший і стисліший підхід до ітерації по масивах, покращуючи зрозумілість.

Приклад виводу (для обох сценаріїв):

У Logger вивід буде виглядати приблизно так, припускаючи, що ваш документ Google Sheets має два аркуші з назвами “Expenses” і “Revenue”:

[20-04-2023 10:00:00: INFO] Expenses
[20-04-2023 10:00:01: INFO] Revenue

Рефакторингований сценарій досягає того ж результату, але є чистішим і легшим для розуміння на перший погляд.

Поглиблений аналіз

Рефакторинг у Google Apps Script частково успадковує свої принципи з більш широкої практики програмної інженерії. Він став більш впізнаваним і структурованим як концепція наприкінці 1990-х років, зокрема завдяки фундаментальній книзі Мартіна Фаулера “Refactoring: Improving the Design of Existing Code” (1999), яка надала масштабний путівник по різноманітним технікам рефакторингу. Хоча конкретика рефакторингу може відрізнятись у різних мовах програмування через їхні синтаксичні та функціональні відмінності, основна мета залишається тією ж: покращення коду без зміни його зовнішньої поведінки.

У контексті Google Apps Script ключовим аспектом під час рефакторингу є врахування квот і обмежень, накладених Google. Ефективно рефакторингований код не тільки краще читається, але й працює швидше та надійніше в рамках цих обмежень. Наприклад, пакетні операції (Range.setValues() замість встановлення значень однієї комірки за раз) можуть суттєво знизити час виконання та споживання квот.

Важливо зазначити, однак, що для деяких складних проектів Google Apps Script може бути недостатнім через ці самі обмеження. У таких випадках розгляд альтернатив, таких як Google Cloud Functions або новіший собрат Apps Script, AppSheet, може запропонувати кращу масштабованість та функціональність.

Врешті-решт, хоча рефакторинг є критичною навичкою у підтримці та покращенні проектів Google Apps Script, розуміння обмежень середовища і розгляд альтернативних рішень є не менш важливими для забезпечення ефективного, надійного та підтримуваного коду.