Kiedy
W schemacie, chociaż if jest elegancki i wszechstronny, może stać się mylący, jeśli zostanie użyty bez wyraźnego else. Jest to szczególnie prawdziwe, gdy intencją jest wykonanie pojedynczej gałęzi kodu tylko wtedy, gdy warunek jest prawdziwy, bez alternatywnej akcji dla przypadku false. W takich scenariuszach konstrukcja when zapewnia jaśniejszą i bardziej zwięzłą alternatywę.
Podstawowa forma when wygląda następująco:
(when test-is-true
do-this
do-that)- Jeśli
testma wartość true (#t), wszystkie wyrażenia w treści konstrukcjiwhensą wykonywane sekwencyjnie. - Jeśli
testma wartość false (#f), nic się nie dzieje i nie są zwracane żadne wartości.
Przykład
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Kontrastowe if i when
Aby lepiej zrozumieć różnicę między if i when, rozważ następujący przykład, w którym oba są używane razem:
(if (= 0 1)
(lumi-message "This will not run")
(when (< 0 1)
(lumi-message "The 'when' condition is true!")
(lumi-message "Executing multiple actions within 'when'.")))Wyjaśnienie:
Warunek
if:- Test
(= 0 1)sprawdza, czy 0 jest równe 1. - Ponieważ to jest fałszywe (
#f), wykonywana jest gałąźelseif.
- Test
Konstrukcja
whenw gałęzielse:- Test
when(< 0 1)sprawdza, czy 0 jest mniejsze niż 1. - Ponieważ jest to prawdą (
#t), wszystkie wyrażenia w treściwhensą wykonywane sekwencyjnie:- First, it prints
"The 'when' condition is true!". - Then, it prints
"Executing multiple actions within 'when'.".
- First, it prints
- Test
Dlaczego warto używać tutaj when?
- Użycie
whenzamiast innegoifupraszcza logikę, gdy nie ma potrzeby jawnej gałęzielsedla warunku. whenwyjaśnia, że istotna jest tylko prawdziwa gałąź, co zmniejsza potencjalne zamieszanie.
Podsumowanie
- Użyj
if, gdy potrzebujesz zarówno prawdziwej, jak i fałszywej gałęzi. - Użyj
when, gdy istnieje tylko jedna gałąź dla prawdziwego przypadku, zwłaszcza gdy należy wykonać wiele akcji. - Połączenie
ifiwhenmoże pomóc w jasnym i zwięzłym ustrukturyzowaniu bardziej złożonych warunków.