Google Apps Script:
Refaktoryzacja

Jak:

W Google Apps Script, typowym scenariuszem, który korzysta z refaktoryzacji, jest uproszczenie zawiłych skryptów, które współdziałają z Google Sheets lub Docs. Początkowo skrypty mogą być napisane w sposób szybki i brudny, aby szybko uzyskać wyniki. Z biegiem czasu, gdy skrypt rośnie, staje się on nieporęczny. Przeanalizujmy przykład refaktoryzacji dla lepszej czytelności i wydajności.

Oryginalny skrypt:

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

Ta funkcja rejestruje nazwę każdego arkusza w Google Spreadsheet. Chociaż działa poprawnie, wykorzystuje przestarzałe praktyki JavaScript i brakuje jej klarowności.

Zrefaktoryzowany skrypt:

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

W zrefaktoryzowanej wersji, przełączyliśmy się na używanie const dla zmiennych, które się nie zmieniają, czyniąc nasz zamiar bardziej zrozumiałym. Skorzystaliśmy również z metody forEach, bardziej nowoczesnego i zwięzłego podejścia do iteracji po tablicach, zwiększając czytelność.

Przykładowe wyjście (dla obu skryptów):

Wyjście w Loggerze będzie wyglądać mniej więcej tak, zakładając, że twoje dokumenty Google Sheets mają dwa arkusze nazwane “Wydatki” i “Przychody”:

[20-04-2023 10:00:00: INFO] Wydatki
[20-04-2023 10:00:01: INFO] Przychody

Zrefaktoryzowany skrypt osiąga ten sam wynik, ale jest czystszy i łatwiejszy do zrozumienia na pierwszy rzut oka.

Uwagi szczegółowe

Refaktoryzacja w Google Apps Script częściowo dziedziczy swoje zasady z szeroko pojętej praktyki inżynierii oprogramowania. Została bardziej rozpoznawalna i ustrukturyzowana jako koncepcja pod koniec lat 90-tych, szczególnie dzięki książce Martina Fowlera “Refaktoryzacja. Ulepszanie struktury istniejącego kodu” (1999), która dostarczyła obszerny przewodnik po różnych technikach refaktoryzacji. Chociaż specyfika refaktoryzacji może się różnić w zależności od języka programowania ze względu na ich składniowe i funkcjonalne różnice, główny cel pozostaje ten sam: poprawa kodu bez zmiany jego zewnętrznego zachowania.

W kontekście Google Apps Script, kluczowym aspektem do rozważenia podczas refaktoryzacji są kwoty i ograniczenia narzucone przez Google. Efektywnie zrefaktoryzowany kod nie tylko lepiej się czyta, ale także działa szybciej i bardziej niezawodnie w ramach tych ograniczeń. Na przykład, operacje wsadowe (Range.setValues() zamiast ustawiania wartości jedna komórka na raz) mogą znacznie zmniejszyć czas wykonania i zużycie kwot.

Warto jednak zauważyć, że dla pewnych złożonych projektów, Google Apps Script może okazać się niewystarczające ze względu na te właśnie ograniczenia. W takich przypadkach, rozważenie alternatyw takich jak Google Cloud Functions czy nowsze rodzeństwo Apps Script, AppSheet, może zaoferować lepszą skalowalność i funkcjonalność.

Ostatecznie, chociaż refaktoryzacja jest kluczową umiejętnością w utrzymaniu i ulepszaniu projektów Google Apps Script, zrozumienie ograniczeń środowiska i rozważenie alternatywnych rozwiązań jest równie ważne dla dostarczania efektywnego, solidnego i łatwego w utrzymaniu kodu.