
Ten krótki poradnik o refactoringu pokazuje, jak pisać guard clauses, czyli klauzule strażnicze, dla swoich instrukcji if, zamiast zagnieżdżać logikę warunkową if … else. To jeden z najszybszych sposobów na czysty i czytelny kod. Przykład jest w JavaScripcie, ale ten sam styl działa w każdym języku, w PHP, w Javie i w pozostałych.

Czym jest guard clause?
Wzorzec guard clauses to po prostu sposób na szybkie sprawdzenia na wejściu metody, na przykład w konstruktorze. Kiedy metoda (albo instancja obiektu) potrzebuje określonych wartości, żeby działać poprawnie, a aplikacja nigdy nie powinna wołać tego kodu z niepoprawnymi danymi, guard clause rzuca wyjątek, gdy tylko wartość nie przejdzie kolejnego warunku. Technika pozwala między innymi uniknąć piętrzenia zagnieżdżonych bloków if … else na ścieżce wykonania metody.
Przykład techniki guard clauses w JavaScripcie
Wyobraź sobie, że masz napisać metodę formatującą datę zależnie od jej wartości: może to być timestamp, obiekt Date albo ciąg znaków, a wszystko inne jest błędem. Kusi wtedy, żeby napisać łańcuch zagnieżdżonych if / else if / else.
Bez guard clauses
function getDate(date) {
let result;
if (!isEmpty(date)) {
if (isTimestamp(date)) {
result = formatWithTimestamp(date);
else if (isDateObject(date))
result = formatWithObject(date);
else if (isString(date))
result = formatWithString(date);
else
throw new DateFormatException(date);
}
return result;
}
return emptyDateError();
}
Z guard clauses
function formatDate(date) {
if (isEmpty($date)) return emptyDateError();
if (isTimestamp(date)) return formatWithTimestamp(date);
if (isDateObject(date)) return formatWithObject(date);
if (isString(date)) return formatWithString(date);
throw new DateFormatException(date);
}Różnicę widać od razu: z guard clauses kod czyta się dużo łatwiej, a utrzymanie go, przez ciebie albo przez kolegów z zespołu, staje się prostsze.
Podsumowanie
Guard clauses i testy walidacyjne robią to samo: sprawdzają dane wejściowe. Różnica sprowadza się do tego, czy niepoprawne dane są spodziewane i wpisane w działanie aplikacji, czy naprawdę niespodziewane. Wyjątków używaj wyłącznie do przypadków niespodziewanych, a zwykłą logikę walidacji do problemów, o których już wiesz, że mogą wystąpić w danych wejściowych.


