Kotlin czy Java – który język wybrać do aplikacji na Androida

· Programowanie

Pytanie „Kotlin czy Java na Androida” zwykle pojawia się w dwóch sytuacjach. Ktoś zaczyna naukę programowania mobilnego albo zespół utrzymuje starszą aplikację i zastanawia się, w czym pisać nowe funkcje. Oba języki działają na tej samej platformie i mogą współistnieć w jednym projekcie, więc wybór rzadko jest zero-jedynkowy.

Różnice mają jednak praktyczne skutki. Google rozwija dokumentację i nowe narzędzia w podejściu Kotlin-first, a Jetpack Compose, czyli nowoczesny sposób budowania interfejsów, powstał z myślą o Kotlinie. Java wciąż jest wspierana i obecna w ogromnej liczbie istniejących aplikacji, bibliotek oraz odpowiedzi na forach. Od wybranego języka zależą tempo nauki, liczba błędów typu NullPointerException, dostępność aktualnych przykładów i oferty pracy, na które można odpowiedzieć bez dodatkowego przygotowania.

Kotlin czy Java na Androida – najważniejsze różnice

Składnia i bezpieczeństwo kodu

Różnicę w zwięzłości najlepiej widać na klasie przechowującej dane. W Kotlinie wystarczy jedna linia, np. data class User(val name: String, val age: Int), a kompilator sam wygeneruje metody equals(), hashCode(), toString() i copy(). W klasycznej Javie ten sam efekt wymaga pól, konstruktora, getterów i ręcznie napisanych (lub wygenerowanych przez IDE) metod, co daje kilkadziesiąt linii kodu.

Kotlin domyślnie zakłada, że zmienna nie może przyjąć wartości null. Typ dopuszczający null trzeba oznaczyć wprost, np. String?, a kompilator wymusza jego obsługę operatorami ?. i ?:. Dzięki temu wiele błędów NullPointerException wychodzi już podczas kompilacji. W Javie programista polega na adnotacjach @Nullable i @NonNull, klasie Optional oraz ręcznych sprawdzeniach, które łatwo pominąć.

Asynchroniczność i współbieżność

Operacje sieciowe czy zapis do bazy nie mogą blokować wątku głównego. W Javie używa się zwykle wątków, ExecutorService i callbacków, które przy kilku zależnych krokach tworzą trudny do czytania, zagnieżdżony kod. Coroutines w Kotlinie pozwalają zapisać ten sam proces sekwencyjnie za pomocą funkcji suspend, z prostszą obsługą błędów i anulowania zadań.

Interoperacyjność

Oba języki działają na tej samej platformie i są w pełni interoperacyjne. Z Kotlina można bezpośrednio wywoływać klasy Javy, a z Javy kod Kotlina, w czym pomagają adnotacje takie jak @JvmStatic czy @JvmOverloads. Jeśli dopiero sprawdzasz, jak zacząć tworzyć aplikacje, pamiętaj, że wybór pierwszego języka nie zamyka drogi do drugiego.

Jak Google i ekosystem Androida traktują oba języki

Google od kilku lat stosuje podejście Kotlin-first. W oficjalnej dokumentacji dla deweloperów Androida przykłady kodu pojawiają się najpierw w Kotlinie, a wersja w Javie, jeśli w ogóle jest, często trafia na drugą kartę. Nowe przewodniki, kursy i przykładowe projekty zwykle powstają wyłącznie w Kotlinie.

Najwyraźniej widać to w Jetpack Compose, czyli deklaratywnym zestawie narzędzi do budowania interfejsu. Compose działa dzięki wtyczce kompilatora Kotlina, dlatego funkcji oznaczonych jako @Composable nie da się pisać w Javie. Kto planuje nowe ekrany w Compose, w praktyce musi tworzyć ich warstwę UI w Kotlinie. Klasyczne widoki oparte na XML nadal działają i można je obsługiwać z poziomu Javy.

Biblioteki Jetpack mają też rozszerzenia KTX, które dodają do istniejących API zwięzłe funkcje rozszerzające i integrację z coroutines, na przykład viewModelScope czy lifecycleScope. Same biblioteki pozostają jednak dostępne z Javy, a SDK Androida wciąż ją obsługuje. Projekt w Javie można więc rozwijać i aktualizować, choć część udogodnień będzie poza zasięgiem.

Android Studio, oparte na IntelliJ IDEA od twórców Kotlina, oferuje dla tego języka pełne wsparcie:

  • podpowiedzi i inspekcje sugerujące bardziej idiomatyczny zapis,
  • refaktoryzację działającą także w projektach mieszanych, z kodem w obu językach,
  • wbudowany konwerter plików Javy na Kotlina, dostępny w menu Code, a także proponowany przy wklejaniu kodu Javy do pliku .kt.

Konwerter daje szybki punkt startu przy migracji, ale wygenerowany kod warto potraktować jak szkic do dalszej pracy.

Nauka i rynek pracy – od którego języka zacząć

Dla początkujących programistów

Jeśli celem jest tworzenie nowych aplikacji mobilnych, Kotlin to rozsądny pierwszy język. Bieżące materiały do nauki Androida używają go domyślnie, więc od początku uczysz się tego, co trafia do świeżych projektów. Zanim jednak zdecydujesz, przejrzyj ogłoszenia o pracę w swoim mieście oraz oferty pracy zdalnej. Policz, ile z nich wymaga samego Kotlina, ile Javy, a ile obu języków. Taki przegląd często lepiej rozstrzyga dylemat Kotlin czy Java na Androida niż ogólne porady.

Przykładowy plan nauki:

  1. Podstawy Kotlina, czyli zmienne, typy, funkcje, klasy, kolekcje i obsługa wartości null. Ćwicz w przeglądarkowym środowisku lub w prostym projekcie konsolowym.
  2. Instalacja Android Studio, utworzenie projektu z szablonu i uruchomienie go na emulatorze oraz na własnym telefonie.
  3. Struktura projektu, czyli pliki Gradle, manifest, zasoby i cykl życia ekranu.
  4. Pierwsza prosta aplikacja, np. lista zadań lub przelicznik jednostek, z jednym lub dwoma ekranami.
  5. Rozbudowa projektu o zapis danych i pobieranie informacji z sieci.

Dla osób znających już Javę

Znajomość Javy nadal się przydaje. Wiele starszych aplikacji, przykładów w sieci i odpowiedzi na Stack Overflow powstało właśnie w tym języku, więc łatwiej je zrozumieć i dostosować. Java jest też popularna po stronie serwera, co ułatwia współpracę z zespołem backendu. Osobie znającej Javę zwykle wystarczy kilka tygodni regularnych ćwiczeń, by swobodnie pisać w Kotlinie, bo korzystają z tych samych bibliotek i narzędzi.

Kiedy zostać przy Javie, a kiedy przejść na Kotlina

Duży, stabilny projekt w Javie, który działa i ma dobre pokrycie testami, nie wymaga przepisywania tylko dlatego, że Kotlin jest dziś domyślnym wyborem. Realny koszt migracji to nie tylko godziny pisania kodu, ale też ponowne testy, ryzyko regresji, przegląd zależności i czas, w którym zespół nie rozwija nowych funkcji. Jeśli aplikacja jest w fazie utrzymania, a zmian jest niewiele, pozostanie przy Javie bywa najrozsądniejsze.

Laptop i smartfon na stole podczas pracy z aplikacjami i mediami społecznościowymi
Migracja projektu wymaga oceny istniejącego kodu, zespołu i tempa rozwoju aplikacji. Zdjęcie: USA-Reiseblogger / Pixabay

Gdy projekt wciąż się rozwija, sprawdza się migracja stopniowa. Nowe ekrany, moduły i testy powstają w Kotlinie, a stary kod w Javie zostaje nietknięty, dopóki nie trzeba go modyfikować. Dzięki temu ryzyko rozkłada się na wiele małych kroków.

Wbudowany konwerter przyspiesza pracę, ale jego wynik zawsze wymaga ręcznego przeglądu. Typowe problemy to:

  • nadużywanie operatora !! lub błędne założenia co do nullowalności typów pochodzących z Javy,
  • pola statyczne przeniesione do companion object bez adnotacji potrzebnych pozostałemu kodowi w Javie, np. @JvmStatic,
  • kod poprawny składniowo, ale nieidiomatyczny, czyli Java zapisana składnią Kotlina.

Decyzję w praktyce wyznaczają kompetencje zespołu, czas na wdrożenie i wspólne konwencje. Zespół bez doświadczenia w Kotlinie potrzebuje okresu nauki i ustalonych zasad stylu, najlepiej egzekwowanych automatycznie przez narzędzia takie jak ktlint lub detekt.

Na start wybierz jeden niewielki, mało ryzykowny ekran albo klasę pomocniczą z testami, napisz go w Kotlinie i omów z zespołem podczas code review. Dopiero na tej podstawie ustalcie zasady dla kolejnych modułów.

Najczęściej zadawane pytania

Czy Java na Androida jest jeszcze używana?

Tak. SDK Androida i biblioteki Jetpack nadal ją obsługują, a napisano w niej ogromną liczbę istniejących aplikacji, bibliotek i odpowiedzi na forach. Projekt w tym języku można dalej rozwijać i aktualizować, choć część nowszych udogodnień, takich jak Compose czy rozszerzenia KTX z coroutines, pozostaje poza jego zasięgiem.

Czy warto uczyć się Kotlina bez znajomości Javy?

Tak, jeśli celem jest tworzenie nowych aplikacji mobilnych. Bieżące materiały, przewodniki i przykładowe projekty Google powstają przede wszystkim w Kotlinie, więc od razu poznajesz język używany w nowych projektach. Podstawy Javy przydadzą się później przy starszym kodzie i przykładach ze Stack Overflow. Przed decyzją warto jednak sprawdzić, jakich języków wymagają lokalne i zdalne oferty pracy.

Czy można łączyć Kotlin i Javę w jednym projekcie?

Tak, oba języki są w pełni interoperacyjne i pliki w każdym z nich mogą współistnieć w tym samym module. Z Kotlina wywołuje się klasy Javy bezpośrednio, a w drugą stronę pomagają adnotacje takie jak @JvmStatic czy @JvmOverloads. Dzięki temu możliwa jest stopniowa migracja, w której tylko nowe ekrany i moduły powstają w Kotlinie.

Czy aplikacje w Kotlinie działają wolniej niż w Javie?

Zwykle nie ma odczuwalnej różnicy, bo kod w obu językach jest kompilowany do kodu bajtowego JVM, a potem do formatu DEX wykonywanego przez środowisko ART, i korzysta z tych samych bibliotek. Na wydajność znacznie bardziej wpływają architektura aplikacji, obsługa wątków i sposób pracy z siecią czy bazą danych niż sam wybór języka. Przy szczególnie wymagających fragmentach kodu warto po prostu zmierzyć działanie profilerem w Android Studio.

Czy Jetpack Compose działa z Javą?

Nie w warstwie interfejsu. Compose opiera się na wtyczce kompilatora Kotlina, dlatego funkcji oznaczonych jako @Composable nie da się pisać w Javie. Reszta aplikacji, np. logika biznesowa czy dostęp do danych, może pozostać w Javie, a klasyczne widoki XML nadal da się obsługiwać z jej poziomu.