Jakiś czas temu umieściłem na blogu wpis, w którym pokazałem Wam jak można wykorzystać Pattern Matching w codziennej pracy ze Swift’em. Nie przedstawiłem jednak wszystkich możliwości tego rozwiązania, dlatego powstała część druga. Będzie krótko i na temat 🧐. Jeżeli jeszcze nie przerobiliście poprzedniego artykułu to teraz jest najlepsza pora – bez tego trudniej będzie Wam nadążyć za poniższymi przykładami.

Warunki oddzielone przecinkami – instrukcja ‚switch’

 

Większość z Was korzystała już zapewne z instrukcji ‚switch’, sprawdzając, czy dane wyrażenie ukrywa określoną wartość. Prosty przykład:

Jednak w Swift można porównać kilka wartości jednocześnie. Wystarczy oddzielić je przecinkiem:

 

Warunki oddzielone przecinkami – instrukcja ‚if’

 

Oddzielając warunki przecinkami, możemy również skorzystać z konkretnej wartości, o ile przypiszemy ją wcześniej do zmiennej. Na potrzeby tego przykładu utworzymy prostą enumerację, której kolejne ‚przypadki’ będą mogły przechowywać również liczbę przepracowanych lat danego programisty:

W pierwszym kroku sprawdzamy, czy mamy do czynienia z programistą Androida i jednocześnie przypisujemy wartość przechowywaną przez enumerację do zmiennej. W następnym kroku sprawdzamy, czy wartość zmiennej experience mieści się w zakresie pomiędzy 0 a 2. Spełnienie obydwu warunków spowoduje oczywiście wykonanie pierwszej instrukcji print.

Jeżeli w Waszych projektach korzystacie z wartości przypisywanych do danego przypadku w enumeracji (tzw. associated values) to taki sposób zapisu pomoże Wam utrzymać czytelność kodu na przyzwoitym poziomie 😏.

W przypadku instrukcji ‚if’, Swift będzie sprawdzał warunki według kolejności w jakiej zostały umieszczone. Jeżeli dany warunek w łańcuch nie zostanie spełniony, to kolejne nie będą już sprawdzane a wartości całego wyrażenia zostanie obliczona jako false.

 

Dodatkowy warunek z ‚where’

 

Na określny warunek możemy nałożyć dodatkowe ograniczenia jeżeli będziemy potrzebowali bardziej precyzyjnego wyniku. Wystarczy użyć do tego wyrażenia ‚where’:

Bardzo podobny przykład mieliśmy w instrukcji ‚if’. Tym razem jednak zamiast przecinka korzystamy z wyrażenia ‚where’, które pozwala nam sprawdzić, czy doświadczenie programisty spełnia określony warunek.

 

Wildcards

 

Wildcards są bardzo przydatne, kiedy chcemy wykonać jakąś operację, ale nie interesuje nas konkretna wartość. Wracając do przykładu z programistami:

A tutaj przykład, który może zastąpić rozciągnięte instrukcje ‚else-if’:

Taki zapis jest bardziej zwięzły i trzeba przyznać, całkiem elegancki 😉.

 

Praktyczne przykłady

 

Na koniec pokażę Wam dwa bardzo fajne, praktyczne przykłady wykorzystania pattern matching w Swift.

Pierwszy pochodzi z aplikacji, którą stworzyłem na potrzeby wpisu o wzorcu MVVM. Poniższego kodu nie możecie wrzucić bezpośrednio do playgrounds, ponieważ z braku właściwych metod nie skompiluje się. Możecie jednak pobrać sobie aplikację z podlinkowanego wpisu. Sam kod wygląda tak:

W bloku wywoływanym przez funkcję getData(), po zakończeniu pobierania danych z serwera przekazywane są dwa argumenty – opcjonalny obiekt zawierający właściwe dane oraz opcjonalny obiekt typu String zawierający informację o błędzie. Korzystając z instrukcji ‚switch’ możemy w łatwy i przede wszystkim czytelny sposób poradzić sobie ze wszystkimi możliwymi konfiguracjami.

Drugim przykładem będzie logowanie użytkownika, które znajduje się dzisiaj w niemal każdej większej aplikacji. Sytuacja zawsze wygląda podobnie – musimy sprawdzić, czy w polach email oraz hasło została wpisana jakaś wartość. Przykład został oczywiście znacznie uproszczony, aby zaprezentować samą koncepcję:

Podobnie jak w przypadku pobierania danych z serwera, tak i tutaj możemy skorzystać z instrukcji ‚switch’. Ma ona tę zaletę, że wymusza na nas obsłużenie wszystkich możliwych przypadków (choćby korzystając z default), a jeżeli o czymś zapomnimy, kompilator nie pozwoli na uruchomienie programu 😆.

 

Słowo na drogę

 

W dwóch wpisach traktujących o pattern matching, pokazałem Wam kilka przydatnych rozwiązań, które można wykorzystać w codziennej pracy. Nie wszystkie są jednakowo przydatne, ale implementacja nawet jednego z nich pozwoli Wam na pisanie bardziej czytelnego kodu. W przyszłości sami sobie za to podziękujecie 🤯. Wdzięczne będą również osoby, którym przyjdzie pracować z Waszym kodem. Do następnego 🧐.


 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *