Kotlin vs Java - jaka jest różnica między nimi?

Autor: John Stephens
Data Utworzenia: 24 Styczeń 2021
Data Aktualizacji: 1 Lipiec 2024
Anonim
Kotlin vs Java - jaka jest różnica między nimi? - Aplikacje
Kotlin vs Java - jaka jest różnica między nimi? - Aplikacje

Zawartość


Java może nadal być pierwszym językiem programowania, który przychodzi na myśl, gdy myślisz o Androidzie, ale tak nie jest mieć używać programowania Java na Androida. W rzeczywistości Kotlin należy teraz do Googlepreferowaneoficjalny język dla Androida!

Aby dowiedzieć się więcej o Javie, uzyskaj bezpłatny wstęp do kursu Java w Make Android Apps.

Todaym, Android Studio jest dostarczany z wbudowaną obsługą Kotlin, więc utworzenie projektu Androida, który rozumie kod Kotlin, jest tak proste, jak zaznaczenie pola wyboru w kreatorze tworzenia projektu Android Studio. Wzrosło poparcie dla tej opcji za bardzo, że decyzja ta sprowadza się teraz głównie do preferencji.

Ale jeśli przejdziesz z Javy na Kotlin, co właściwie zyskujesz? Jakie funkcje ma Kotlin, których nie ma Java i odwrotnie?

W tym artykule przyjrzymy się wszystkim głównym różnicom między Kotlin a Javą.

Kotlin vs Java, później oferuje bardziej zwięzły kod - bez findViewByIds

Jeśli porównasz klasę Kotlin i klasę Java, które wykonują tę samą pracę, klasa Kotlin będzie na ogół o wiele bardziej zwięzła, ale jest jeden obszar w szczególności, w którym Kotlin może poważnie zmniejszyć ilość kodu tablicy, którą musisz napisać: findViewByIds.


Rozszerzenia Kotlin dla systemu Android umożliwiają importowanie odwołania do widoku do pliku działania, w którym to momencie będziesz mógł pracować z tym widokiem, tak jakby był on częścią działania. Wynik? Nigdy więcej nie będziesz musiał pisać innej metody findViewById!

Aby móc korzystać z tych rozszerzeń, musisz dodać dodatkową wtyczkę do pliku build.gradle na poziomie modułu (zastosuj wtyczkę: „rozszerzenia kotlin-android”), ale potem możesz rozpocząć importowanie widoków przykład, jeśli plik activity_main.xml zawiera TextView o identyfikatorze textView, wówczas do działania dodajesz:

import kotlinx.android.synthetic.main.activity_main.textView

Następnie możesz uzyskać dostęp do tego TextView, używając tylko jego identyfikatora:

textView.setText („Hello World”)

To jest dużo bardziej zwięzły niż odpowiednik Java:

TextView text = (TextView) findViewById (R.id.textView); text.setText („Hello World”);

Kotlin jest domyślnie bezpieczny

Wyjątki NullPointerExcept są ogromnym źródłem frustracji dla programistów Java. Java pozwala przypisać wartość null do dowolnej zmiennej, ale jeśli spróbujesz użyć odwołania do obiektu, które ma wartość null, przygotuj się na wystąpienie wyjątku NullPointerException!


Przeczytaj także: Wprowadzenie do Kotiln na Androida

W Kotlin domyślnie wszystkie typy nie mają wartości zerowej (nie są w stanie utrzymać wartości zerowej). Jeśli spróbujesz przypisać lub zwrócić wartość null w kodzie Kotlin, nie powiedzie się to w czasie kompilacji, więc żadna z poniższych linii nie zostanie skompilowana:

nazwa val: String = null

fun getName (): String = null

Jeśli ty naprawdę chcesz przypisać wartość zerową do zmiennej w Kotlinie, musisz jawnie zaznaczyć tę zmienną jako zerowalną, dodając znak zapytania po typie:

val number: Int? = zero

To sprawia, że ​​prawie niemożliwe jest napotkanie wyjątków NullPointerExcept w Kotlinie - w rzeczywistości, jeśli napotkasz ten wyjątek, istnieje duża szansa, że ​​wyraźnie poprosiłeś Kotlina o jego wyrzucenie lub wyjątek NullPointerException pochodzi z zewnętrznego kodu Java.

Funkcje rozszerzeń

Kotlin daje programistom możliwość rozszerzenia klasy o nową funkcjonalność, co jest idealne, jeśli istnieje klasa, w której zawsze czułeś, że brakuje ważnej metody!

Te „funkcje rozszerzeń” nie są dostępne w Javie, chociaż są dostępne w innych językach programowania, których można używać do programowania Androida, takich jak C #.

Czytaj dalej: Samouczek Java dla początkujących

Tworzysz funkcję rozszerzenia, poprzedzając nazwę klasy, którą chcesz rozszerzyć (np. „String”), do nazwy tworzonej funkcji („styleString”), na przykład:

fun String.styleString (): String {// Styl ciąg, a następnie zwróć go //}

Następnie możesz wywołać tę funkcję w instancjach klasy rozszerzonej za pomocą. notacja, jakby była częścią tej klasy:

myString.styleString ()

Korpusy są obywatelami pierwszej klasy

Ilekroć zainicjujesz długotrwałą operację, taką jak sieciowe operacje we / wy lub praca intensywnie wykorzystująca procesor, wątek wywołujący jest blokowany do czasu zakończenia operacji. Ponieważ Android jest domyślnie jednowątkowy, gdy tylko zablokujesz główny wątek, interfejs aplikacji się zawiesi i pozostanie bez odpowiedzi, dopóki operacja się nie zakończy.

W Javie rozwiązaniem tradycyjnie było tworzenie wątku w tle, w którym można wykonać tę intensywną lub długotrwałą pracę, ale zarządzanie wieloma wątkami może prowadzić do złożonego, podatnego na błędy kodu, a tworzenie nowego wątku jest kosztowną operacją.

Podczas gdy możesz tworzyć dodatkowe wątki w Kotlinie, możesz także używać coroutines. Korpusy wykonują długotrwałe i intensywne zadania, zawieszając wykonywanie w pewnym punkcie bez blokowania wątku, a następnie wznawiając tę ​​funkcję w późniejszym momencie, być może w innym wątku. Umożliwia to tworzenie nieblokującego kodu asynchronicznego, który wygląda synchroniczny, a zatem bardziej przejrzysty, zwięzły i czytelny dla człowieka. Korpusy są również bez stosów, więc mają mniejsze zużycie pamięci w porównaniu do wątków i otwierają drzwi do dodatkowych stylów asynchronicznego programowania nieblokującego, takich jak async / czekaj.

Nie ma zaznaczonych wyjątków

Kotlin nie sprawdził wyjątków, więc nie musisz wychwytywać ani zgłaszać żadnych wyjątków.

To, czy przyciągnie Cię do Kotlina, czy sprawi, że będziesz chciał pozostać przy Javie, będzie zależeć od twojej opinii o sprawdzonych wyjątkach, ponieważ jest to funkcja, która dzieli społeczność programistów. Jeśli masz dość bloków try / catch zaśmiecających kod Java, to będziesz zadowolony z tego pominięcia, jednak jeśli zauważysz, że sprawdzone wyjątki zachęcają do myślenia o odzyskiwaniu błędów i ostatecznie popychają Cię do stworzenia bardziej niezawodnego kodu, wtedy bardziej prawdopodobne jest, że zobaczysz to jako obszar, w którym Java ma przewagę nad Kotlinem.

Natywne wsparcie dla delegacji

Kotlin, w przeciwieństwie do Javy, obsługuje wzorzec projektowy „kompozycja nad dziedziczeniem” poprzez delegację pierwszej klasy (czasami nazywaną delegacją niejawną). Delegowanie polega na tym, że obiekt odbierający przekazuje operacje do drugiego obiektu delegowanego, który jest obiektem pomocniczym w oryginalnym kontekście.

Delegacja klas Kotlina jest alternatywą dla dziedziczenia, która umożliwia stosowanie wielokrotnego dziedziczenia. Tymczasem delegowane właściwości Kotlina pomagają zapobiegać powielaniu kodu, na przykład jeśli chcesz ponownie użyć tego samego kodu do modułów pobierających i ustawiających wiele właściwości, możesz wyodrębnić ten kod do delegowanej właściwości. Delegat właściwości musi zdefiniować funkcję operatora getValue i, opcjonalnie, operator setValue:

klasa Delegat {operator fun getValue (...) ... ... ... ...} operator fun setValue (...) ... ... ...}}

Następnie, gdy tworzysz właściwość, możesz zadeklarować, że funkcje pobierające i ustawiające dla tej konkretnej właściwości są obsługiwane przez inną klasę:

klasa MyClass {var property: String by Delegate ()}

Klasy danych

Często zdarza się, że w projekcie jest wiele klas, które zajmują się tylko przechowywaniem danych. W Javie będziesz pisać dużo kodu typu Booster dla tych klas, mimo że same klasy mają bardzo małą funkcjonalność. Zazwyczaj musisz zdefiniować konstruktor, pola do przechowywania danych, funkcje pobierające i ustawiające dla każdego pola oraz funkcje hashCode (), equals () i toString ().

W Kotlin, jeśli uwzględnisz słowo kluczowe „data” w definicji klasy, kompilator wykona całą tę pracę za Ciebie, w tym wygeneruje wszystkie niezbędne funkcje pobierające i ustawiające:

klasa danych Data (var miesiąc: Ciąg, var dzień: Int)

Inteligentne obsady

W Javie często trzeba sprawdzać typ, a następnie rzutować obiekt w sytuacjach, gdy jest już jasne, że obiekt można rzutować.

Inteligentne castingi Kotlina mogą obsłużyć te zbędne castingi, więc nie musisz rzucać do środka oświadczenia, jeśli już sprawdziłeś go za pomocą operatora Kotlin „jest”. Na przykład kompilator wie, że następująca rzutowanie jest bezpieczna:

if (hello is String) {printString (hello)}

Wsparcie dla konstruktorów

W przeciwieństwie do Javy klasa Kotlin może mieć główny konstruktor i jeden lub większą liczbę drugorzędnych konstruktorów, które tworzysz, umieszczając je w deklaracji klasy:

konstruktor klasy MainActivity (firstName: String) {}

Brak obsługi niejawnych rozszerzeń konwersji

Kotlin nie obsługuje niejawnej konwersji liczbowej, więc mniejsze typy nie są domyślnie konwertowane na większe. W Kotlin, jeśli chcesz przypisać wartość typu Byte do zmiennej Int, musisz wykonać jawną konwersję, podczas gdy Java obsługuje konwersje niejawne.

Biblioteki przetwarzające adnotacje za pomocą Kotlin

Kotlin obsługuje wszystkie istniejące frameworki i biblioteki Java, w tym zaawansowane frameworki oparte na przetwarzaniu adnotacji, chociaż niektóre biblioteki Java już oferują rozszerzenia Kotlin, takie jak RxKotlin.

Jeśli chcesz użyć biblioteki Java opartej na przetwarzaniu adnotacji, dodanie jej do projektu Kotlin jest nieco inne, ponieważ musisz określić zależność za pomocą kotlin-kapt plugin, a następnie użyj narzędzia do przetwarzania adnotacji Kotlin (kapt) zamiast annotationProcessor. Na przykład:

// Zastosuj wtyczkę // Zastosuj wtyczkę: kotlin-kapt // Dodaj odpowiednie zależności przy użyciu konfiguracji kaptura // dependencies {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

Zamienność z Javą

Zastanawiając się, czy użyć programowania Kotlin, czy Java dla Androida, należy pamiętać, że istnieje trzecia opcja: używać obu. Pomimo wszystkich różnic między tymi dwoma językami, Java i Kotlin są w 100% interoperacyjne. Możesz wywoływać kod Kotlin z Javy i możesz wywoływać kod Java z Kotlin, więc możesz mieć klasy Kotlin i Java obok siebie w tym samym projekcie, a wszystko nadal będzie się kompilować.

Ta elastyczność przemieszczania się między tymi dwoma językami jest przydatna na początku, gdy zaczynasz pracę z Kotlin, ponieważ pozwala on stopniowo wprowadzać Kotlin do istniejącego projektu, ale możesz również preferować stałe używanie obu języków. Na przykład mogą istnieć pewne funkcje, które wolisz pisać w Kotlinie, oraz pewne funkcje, które łatwiej ci pisać w Javie. Ponieważ zarówno Kotlin, jak i Java kompilują się do kodu bajtowego, Twoi użytkownicy końcowi nie będą mogli powiedzieć, gdzie kończy się Twój kod Java, a kod Kotlin się zaczyna, więc nie ma powodu, dla którego nie możesz wypuścić aplikacji składającej się z Java i Kod Kotlina.

Jeśli chcesz wypróbować Kotlin dla siebie, o ile masz zainstalowany program Android Studio 3.0 Preview lub nowszy, możesz zacząć na kilka sposobów:

  • Utwórz nowy projekt Android Studio. Najłatwiejszą metodą jest utworzenie nowego projektu i zaznaczenie pola wyboru „Dołącz obsługę Kotlin” w kreatorze tworzenia projektu.

  • Dodaj klasę Kotlin do istniejącego katalogu. Kliknij z wciśniętym klawiszem Control w wskazany katalog, a następnie wybierz „Plik> Nowy> Plik / klasa Kotlin.” Android Studio wyświetli baner z prośbą o skonfigurowanie projektu do obsługi Kotlin; kliknij link „Konfiguruj” i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.

  • Konwertuj istniejące pliki Java na Kotlin. Możesz uruchomić dowolny plik Java za pomocą konwertera Kotlin, klikając z wciśniętym klawiszem Control i wybierając „Kod> Konwertuj plik Java na plik Kotlin”.

Podsumowując

Jak widać, istnieje wiele dobrych powodów, aby preferować Kotlin od Javy, ale jest kilka obszarów, w których Java ma przewagę. Być może najbardziej: w tym momencie wielu programistów Androida lepiej zna Javę. Prawdopodobnie debata Kotlin vs Java nie zakończy się w najbliższym czasie, a obie mają swoje zalety. Czy zamierzasz przejść na Kotlin, czy uważasz, że Java jest nadal najlepszą opcją dla Androida?

Czytaj dalej: Wprowadzenie do składni Java dla programistów Androida

wiftkey jet niezawodny w obzarze klawiatury Androida, zapewniając przewidywania oparte na ztucznej inteligencji i wiele innych funkcji. Ale zepół odpowiedzialny za aplikację nie ułatwiał tego, uj...

Czy dotałeś błyzczący nowy telefon z Androidem? Witamy w Team Android! podoba ci ię tutaj. Ale jak zacząć? Przejście z iPhone'a na Androida może być komplikowanym proceem lub może być łatwe, w zal...

Fascynujące Posty