Kotlin - Delegated Properties (Delegacja)

W Kotlinie wzorzec delegacji (Delegation pattern) jest domyślnie zaimplementowany do bibloteki. W tym poście postaram się omówić podstawy oraz pokazać przykłady.

Założenia delegacji w Kotlinie

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.

Podział delegacji w Kotlinie

Dokumentacja Kotlina nie zakłada tylko jednego rodzaju Delegated Properties. W tabeli poniżej przedstawiam wszystkie rodzaje:

Szczególny przypadek lateinit

Na oficjalnej stronie Kotlina - Delegated Properties nie ma wzmianki o słowie kluczowym lateinit. Myślę jednak, że śmiało można zaliczyć go do delegacji.

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.

Zastosowanie Delegated Properties

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.

shop
Otwórz Sklep Play

Zachęcam cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.