Kotlin
2018-05-18
W Kotlinie wzorzec delegacji (Delegation pattern) jest domyślnie zaimplementowany do biblioteki. W tym poście postaram się omówić podstawy oraz pokazać przykłady.
Nie zawsze jest tak, że wiemy jakie dane przyjmą nasze zmienne albo chcemy pozbyć się z danej partii kodu inicjowania tych danych.
Takie podejście ma dwa kluczowe założenia:
•Po pierwsze - Odpuszczamy inicjowanie pustych zmiennych.
•Po drugie - Ułatwiamy zmiany w implementacji.
Dokumentacja Kotlina nie zakłada tylko jednego rodzaju Delegated Properties. W tabeli poniżej przedstawiam wszystkie rodzaje:
Na oficjalnej stronie Kotlina nie ma wzmianki o słowie kluczowym lateinit. Myślę jednak, że śmiało można zaliczyć go do delegacji.
Delegated Properties
Słowo kluczowe lateinit pozwala na zadeklarowanie zmiennej później niż w konstruktorze. Szczególnie przydatne okazuje się to podczas używania dependency injection oraz w testach jednostkowych.
Od wersji Kotlin'a 1.2 można sprawdzać poprzez operator referencji (::) czy zmienna lateinit jest zainicjowana.
W powyższym przykładzie bez względu czy uruchomimy funkcję initialize() czy nie, to kompilator nie rzuci nam błędu.
Jako, iż znamy już możliwe wersje oddelegowywania inicjacji obiektów w Kotlin'ie. Warto zobaczyć jak można wykorzystać to w praktyce.
Klasa GetTopics jest delegatem ponieważ odsuwa przypisanie wartości zmiennej topics do metody getValue().
Dopóki nasz zmienna jest immutable (val) to nie musimy implementować interfejsu setValue().
Jeżeli zdziwiło Cię dziwne użycie konstruktora Array() to możesz o tym poczytać więcej tutaj:
Kotlin - Array
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.