Czym jest Kotlin? Ostatnio coraz częściej możemy usłyszeć tą nazwę i to nie dlatego, że jeden z popularnych producentów ketchupu zdobywa międzynarodową sławę. Kotlin to bardzo nowoczesny język programowania stworzony przez firmę JetBrains i jest to język, który warto poznać.


Artur Latoszewski. Programista Android w firmie Braintri. Pasjonat, obsesyjnie poszukujący nowych rozwiązań. Fanatyk czystej architektury, wyznawca SOLID, fanboy Kotlin’a. Za każdym razem próbuje robić wszystko lepiej niż poprzednio. W swojej karierze zajmował się róznorodnymi aplikacjami z obszarów bankowości, bezpieczeństwa, IoT, VoIP. Poza technicznymi umiejętnościami doskonali się w skutecznym zarządzaniu zarówno projektami jak i życiem. W przerwie od komputera spędza czas trenując kickboxing i brazylijskie ju-jitsu.


Programiści firmy JetBrains byli zdania, że większość języków nie posiada cech, które potrzebują, z wyjątkiem Scali. Kompilowała ona się jednak zbyt wolno w stosunku do Javy. Postanowili więc stworzyć własny język, który będzie mógł w pełni współpracować z Java i będzie zapewniał podobną wydajność. Tak powstał Kotlin, który został przedstawiony po raz pierwszy w 2011 roku. Jest to statycznie typowany język, który działa na maszynie wirtualnej Javy. Co ważne jest on udostępniony na podstawie licencji Apache 2, w przeciwieństwie do Javy udostępnionej na licencji na GNU GPL. Licencja Apache zapewnia bardzo liberalne podejście na zasadzie „rób co chcesz, tylko mnie nie pozywaj”, natomiast w przypadku Javy licencja jest bardziej skomplikowana i w związku z jej wykorzystaniem trwa spór sądowy pomiędzy Oracle (właścicielem praw do Javy), a Google (twórcą Androida, działającego w oparciu o Javę).

Po tym obowiązkowym wstępie wiemy już, że Kotlin powstał, żeby być fajny, nowoczesny i szybki. Skoro jest taki świetny i otwarty to pewnie od razu powinniśmy wszyscy zapomnieć o Javie i przejść na Kotlina? Opowiem wam dziś, jak widzę język Kotlin z perspektywy Android Developera.

Czy zawsze powinniśmy pisać aplikacje w języku Kotlin?

Uncle Bob na pytanie, kiedy pisać testy dla aplikacji odpowiadał – testuj wszystko co się da. Dopiero później, dla bardziej zaawansowanych użytkowników, tłumaczył, że są odstępstwa od ogólnej reguły. Kiedy w takim razie powinniśmy pisać aplikacje w języku Kotlin? Analogiczna odpowiedź brzmiałaby: nigdy.
Zapytacie, jak to, przecież jest to świetny i nowoczesny język programowania? Macie rację, ale jest to informacja dla tych bardziej zaawansowanych użytkowników, czujących się już całkiem nieźle w Javie i rozumiejących jak ona działa, więc zróbmy z niej na początek tajemnicę.

Dlaczego Kotlin nie jest dobrym językiem na początek?

Pierwszy powód jest dość oczywisty — Java jest ciągle najpopularniejszym językiem programowania i pojawia się w każdej ofercie pracy. Kotlin jest tylko dodatkowym wymaganiem, który miło byłoby spełnić. Ciągle większość istniejących projektów i bibliotek jest napisana w Javie i minie jeszcze dużo czasu zanim to się zmieni. Na pewno w swojej karierze będziesz musiał pisać kod w Javie albo kod Kotlina, który będzie musiał współpracować z Javą (co wbrew pozorom nie zawsze dzieje się automatycznie).

Również większość istniejącej wiedzy – tutoriale, przykłady, zaawansowane książki zostały przygotowane z myślą o Javie lub użyto w nich przykładów w Javie. Wystarczy też spojrzeć na Stack Overflow by zdać sobie sprawę z różnicy skali. Jest prawie 1,5 mln pytań otagowanych jako Java wobec 10 tys. jako Kotlin.

Znajomość Javy jest potrzebna nie tylko ze względu na „przeszłość”. Kotlin jest językiem, który bardzo wielu rzeczy „domyśla się”, pozbywa się ceremonii obecnej w starszych językach, co pozwala na uzyskanie dużo bardziej zwięzłego kodu. Jest to bardzo fajne narzędzie, ale może być zabójcze dla kogoś, kto nie rozumie jak to działa i skąd to się bierze. Łatwiej będzie zrozumieć to wszystko co dzieje się pod spodem, gdy „wyklepiemy” to wcześniej w naszej starej dobrej Javie.

Być może głównym argumentem jest to, że Kotlin kompiluje się do kodu bajtowego Javy. Technicznie kod maszynowy będzie działał na tych samych zasadach co wcześniej. Trzeba to rozumieć, zwłaszcza mając na uwadze kwestie wydajności. W bardziej zaawansowanych zastosowaniach będzie nawet konieczne sprawdzenie jaki będzie efekt wynikowy tych kompilacji.

Ostatnim powodem, dlaczego warto zacząć od Javy jest to, że łatwo automatycznie przekonwertować Javę w Kotlina, natomiast w drugą stronę jest to trudniejsze.

Już umiem Javę, to po co mi w takim razie ten cały Kotlin?

Najprostsza odpowiedź brzmi – bo możesz. Programiści to osoby lubiące uczyć się nowych rzeczy, a w przypadku Kotlina przejście jest wyjątkowo łatwe. Język został stworzony właśnie z myślą o przejściu programistów z Javy. W najpopularniejszym IDE – IntelliJ wystarczy nacisnąć kombinację czterech przycisków i już z klasy Javowej mamy Kotlina. Oczywiście nie jest to idealna wersja tego co chcielibyśmy uzyskać, bez wykorzystania wielu funkcjonalności języka i czasem niebezpieczna, ale coś na dobry początek. Dzięki temu też od razu widzisz podstawowe różnice między językami i co się zmieniło, a przede wszystkim co zniknęło. Od tego punktu też polecam zacząć naukę, a z biegiem czasu zobaczysz jak dużo jeszcze jesteś w stanie osiągnąć.

Kotlin posiada też świetne tutoriale na swojej stronie, a także Try Kotlin, gdzie online możesz pobawić się nowymi funkcjonalnościami. Sam byłem w niemałym szoku jak naturalnie wychodzi mi przejście na nowy język. Samo pisanie w Kotlinie przywróciło mi radość z pisania kodu, zamiast „klepania” kodu w Javie. Dzięki tej całej bezceremonialności Kotlina i skróceniu klas możemy skupić się na tym co naprawdę jest ważne w naszej aplikacji, zamiast rzemieślniczo przepisywać setki takich samych linijek. Kolejnym fajnym aspektem jest to, że większość dobrych praktyk ciągle jest taka sama! Wszystko co znacie z książek „Effective Java” czy „Clean Code” dalej ma tutaj rację bytu.

Ciągle nie jesteś przekonany? To posłuchaj innych i daj sobie szansę. Kotlin stał się modny, „trendy”, fajny. Jest już z nami od jakiegoś czasu i stał się naprawdę dojrzałym produktem, którego API nie będzie się dynamicznie zmieniać. Dużo osób, które osobiście uznaję za autorytety przeszło na Kotlina, więc musisz wiedzieć, że dużo najfajniejszych rzeczy będzie się teraz dziać w tym języku. Google uznało Kotlina za oficjalny język Androida i nawet sam Jake Wharton postanowił przejść do Google, by móc wspierać ten język.

Pamiętaj też kto stoi za tym językiem. Stworzyli go ludzie z JetBrains od IntelliJ – Twojego ulubionego IDE. Żaden inny język nigdy nie będzie miał takiej integracji z IDE jak ten.

„Miałeś moją ciekawość. Teraz masz moją uwagę”

Już wiemy, że Kotlin jest gdzieś tam pod spodem kodem bajtowym Javy, więc jakiej Javy wymaga? Działa od wersji 6 i daje nam wszystkie swoje funkcjonalności już od samego początku. Nie musisz użerać się ze starą wersją Javy i płakać z tęsknoty za nowościami.

Wspominałem wcześniej, że kod jest dużo bardziej zwięzły, co ułatwia skupienie się na ważnych rzeczach, ale to ma też dodatkową ukrytą zaletę. Przeglądanie takiego kodu jest dużo przyjemniejsze i pracując w zespole będziecie mogli szybciej zrozumieć istniejący kod, znaleźć ewentualne błędy i usprawnienia.

Teraz samo „mięso fajności”, a w nim kilka technicznych szczegółów:

1. Mamy lambdy – po prostu, bez żadnych wyjątków, bez retrolambdy, bez Javy 8. Zmniejsza niepotrzebny kod. Bardzo.

Java

Kotlin

2. Mamy „optionale” – Tony Hoare nazwał stworzenie null referencji swoim billion-dollar mistake. Teraz dzięki prostemu znakowi „?” tworzymy obiekt typu Nullable, który pozwala w przyjemny sposób obejść się z wartością null. W związku z tym mamy też trzy nowe operatory:

  • „?.” – operator bezpiecznego wywołania,
  • „!!” – asercja sprawdzająca czy obiekt jest null’em i rzucające NullPointerException,
  • „?:” – Elvis, który pozwoli nam zdecydować co zrobić, gdy obiekt jest null’em,

Java

Kotlin

3. Mamy Kotlinx – na pewno każdy z Was kojarzy bibliotekę Butter Knife na Android’a albo nieśmiertelne findViewById. Teraz mamy bezpośredni dostęp do widoków przez ID – to po prostu działa.
Java

Kotlin

4. Pamiętacie stare klasy POJO z ogromną ilością setterów i getterów, a także koniecznością pisania metod equals(), hashCode(), toString(), copy()? Tutaj mamy to wszystko dostępne od ręki jako data class.
Java

Kotlin

5. Czuliście, że brakuje wam czegoś w enumach? Proszę bardzo oto Sealed Classes – enumy na sterydach, które pozwalają mieć kilka instancji danego typu i pozwalają przechowywać ich stan
Java

Kotlin

6. Mamy extension function – jeżeli kiedykolwiek w jakimś API brakowało Ci metody teraz masz możliwość ją samemu stworzyć. Najprostszy przykład to dodanie metod hide() i show() do View, ale możliwości są nieograniczone.

7. Kotlin daje bardzo dużo zdefiniowanych wcześniej extension function, np. wzorzec budowniczego, czy możliwość operacji na kolekcjach jak na strumieniach.

To teraz jak żyć?

Opowiem wam teraz jak my pracujemy z Kotlinem. Wszystkie nowe projekty piszemy w Kotlinie. Zawsze. Mamy jednak też dużo starszych projektów napisanych w Javie. Jak wtedy działamy? Wszystkie nowe klasy piszemy w Kotlinie. Trochę bardziej skomplikowana sytuacja jest wtedy, gdy musimy pracować z już istniejącą klasą w Javie. To już zależy od ilości zmian, które chcemy wprowadzić. Jeżeli są to drobne zmiany to zostajemy przy Javie – niestety konwersja na Kotlina powoduje utratę historii zmian w pliku. Jeżeli natomiast jest to „coś większego” to zazwyczaj zaczynamy od magicznej komendy konwertującej Javę do Kotlina. Dzięki temu praca od razu staje się przyjemniejsza.

Jeżeli boicie się konwertować produkcyjny kod na Kotlina, świetnym pomysłem na początek jest przepisanie kodu testów. Zakładam oczywiście, że piszecie testy, a jeżeli jeszcze nie to właśnie podjęliście decyzję, by zacząć pisać je w Kotlinie.

Co z back-end’em zapytacie? Jeżeli macie go napisanego w Javie – pokochacie jego nową wersję w Kotlinie. W końcu Kotlin to taka super Java. Tutaj jednak trzeba bardziej uważać. Z rozmów z moimi kolegami wiem, że przejście nie jest tak naturalne jak w świecie Androida. Trzeba bardziej uważać w przypadku integracji ze Spring’iem i Hibernate’m. Kotlin jeszcze się tam tak bardzo nie zadomowił, ale moim zdaniem to tylko kwestia czasu. Póki co najbardziej krytyczne części systemu ciągle są utrzymywane i pisane w Javie, cała reszta czerpie pełnymi garściami z nowych możliwości.

Macie coś jeszcze?

Zdecydowanie tak! Wspomnę tutaj tylko o kilku rzeczach, o każdej z nich można byłoby napisać osobny artykuł – zachęcam Was do doczytania na ten temat.

  • Kotlin wspiera także modne ostatnio programowanie funkcyjne. Moim zdaniem jest to bardzo dobry trend rozwoju. Mamy na przykład funkcje pierwszej klasy (może być przechowywana jako obiekt) i funkcje wyższego rzędu (zwracają lub przyjmują inne funkcje). Powstała też specjalna biblioteka do wspierania programowania funkcyjnego „Arrow”.
  • RxJava była uważana za największe wydarzenie w świecie Android i owszem jest super, ale czy może być coś lepszego? Tak! Mamy coroutines! Upraszcza asynchroniczne programowanie, przez dostarczenie mechanizmów pisania kodu sekwencyjnego. W realnym świecie w większości nie operujemy na prawdziwych strumieniach tylko na kolekcjach. Jak wiemy Kotlin pozwala operować na kolekcjach jak na strumieniach. We wstępnych testach Coroutines prezentują się dużo bardziej wydajne (zwłaszcza pamięciowo) w przypadku operacji na kolekcjach. W przypadku pracy z realnymi strumieniami pewnie ciągle RxJava będzie lepsza.
  • Zawsze chciałeś pisać jeden kod na kilka platform? Zaprzyjaźnij się z Kotlin/Native. Niestety jeszcze daleko do pełnej funkcjonalności tego narzędzia, ale już powstają aplikacje napisane dla Androida, iOSa, a nawet aplikacje webowe.
  • Kotlin jest kodem składniowo bardzo podobnym do Swifta znanego z iOSa. Dzięki temu zespoły mogą sobie robić wzajemny Code Review! Znacząco zwiększa to wymianę wiedzy i zacieśnia współpracę.

Podsumowanie

Zastanawiałem się też czy są jeszcze jakieś argumenty, dla których ktoś nie chciałby używać Kotlina. Naprawdę nie umiałem ich znaleźć. Owszem nieumiejętne jego wykorzystanie może mieć narzut na wydajność, ale to też kwestia praktyki. Być może gdybym chciał napisać ultra lekkie SDK wtedy, rzeczywiście zastanowiłbym się, czy zostać przy Javie.

Gdyby jednak ktoś mi teraz kazał całkowicie przestać go używać, powołałbym się na klauzulę sumienia. Dla mnie Kotlin to najlepsze „narzędzie programistyczne” z jakim spotkałem się w ostatnich latach. Zdecydowanie przywraca radość z pisania kodu i aż chce się go używać. Wspomniałem tutaj o wielu fajnych cechach języka, ale uwierzcie mi, że to dopiero drobny wstęp i jest jeszcze bardzo dużo do odkrycia. Zachęcam Was do rozpoczęcia swojej przygody jeżeli już znacie Javę. Ja ciągle uczę się czegoś nowego i za każdym razem czuję się jak dziecko w sklepie z cukierkami.

Zapraszamy do dyskusji
Nie ma więcej wpisów

Send this to a friend