JavaRush /Blog Java /Random-PL /KotlinRush: czy ma sens dalsze pisanie w Javie?
NikEy
Poziom 41
Новосибирск

KotlinRush: czy ma sens dalsze pisanie w Javie?

Opublikowano w grupie Random-PL
Witaj, studencie JavaRush, zanim całkowicie pochłonie Cię Java, chciałbym poszerzyć Twoje horyzonty i zwrócić uwagę na coraz popularniejszy język Kotlin !
KotlinRush: czy ma sens dalsze pisanie w Javie?  - 1
Kotlin to dość młody język opracowany przez JetBrains . Tak, tak, ta sama firma, która opracowała nasze ulubione IDE: IntelliJ IDEA. Kotlin jest językiem JVM i jest w pełni kompatybilny z Javą , to znaczy z kodu Kotlina można łatwo uzyskać dostęp do znanych bibliotek Java.Co z bibliotekami: Klasy Kotlina i Java mogą współistnieć w jednym pakiecie! Kotlin był tak popularny wśród społeczności programistów, że Google uznał go za oficjalny język programistyczny dla Androida, a ostatnio Kotlin zaczął zyskiwać na popularności w projektach korporacyjnych. W tym artykule chciałbym podać kilka przykładów porównawczych kodu napisanego w Kotlinie i Javie oraz wyciągnąć pewne wnioski. Iść! Zacznijmy jak zwykle od „Hello World”
// Java
public class Application {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
// Kotlin
class Application
fun main(vararg args: String) {
    println("Hello World!")
}
Patrząc na przykład Kotlina, możemy od razu zauważyć, co następuje:
  • nie ma potrzeby wpisywania średnika na końcu linii;
  • wszystkie metody opisane są słowem kluczowym fun ;
  • Aby wydrukować linię, wystarczy jedno słowo - println() !
Tworzenie instancji
// Java (до 10)
final Application application = new Application();
// Kotlin
val application = Application()
Różnice w Kotlinie:
  • nie ma potrzeby deklarowania typu zmiennej, jeśli wynika to z instancji;
  • zamiast typu zmiennej - val (niezmienny) lub var (zmienny);
  • Nie musisz wpisywać nowego słowa kluczowego, aby utworzyć instancję !
Opis metod
// Java
public int sum(int a, int b) {
    return (a + b);
}
// Kotlin
fun sum(a: Int, b: Int): Int {
return (a + b)
}
Różnice w Kotlinie:
  • jeśli coś ma zostać zwrócone przez metodę, do podpisu dodawany jest „ : Int ”, gdzie Int jest typem zwracanej wartości;
  • opis parametrów metody: najpierw nazwa zmiennej, potem jej typ;
  • ponieważ treść metody składa się tylko z jednej linii, możesz pominąć return :
    fun sum(a: Int, b: Int): Int = (a+b)
Sformatowane wyjście ciągu
// Java
public int sum(int a, int b) {
    int result = (a + b);
    System.out.printf("Сумма %d и %d равна %d\n", a, b, result);
    return result;
}
// Kotlin
fun sum(a: Int, b: Int): Int {
    val result = (a + b)
    println("Сумма $a и $b равна $result")
    return result
}
Kotlin obsługuje interpolację ciągów, wystarczy użyć symbolu „$” na początku zmiennej. Zapis ten znacząco poprawia czystość i czytelność kodu. Porównanie instancji
// Java
object1.equals(object2)
// Kotlin
object1 == object2
W Kotlinie porównanie „ ==” typów obiektów zostało przetłumaczone na equals! Do porównywania linków ===używa się „ ”. Wyjątki
// Java
public List<String> getFileContent(String file) throws IOException {
    Path path = Paths.get(file);
    return Files.readAllLines(path);
}
// Kotlin
fun getFileContent(file: String): List<String> {
    val path = Paths.get(file)
    return Files.readAllLines(path)
}
W Kotlinie nie ma sprawdzanych wyjątków , teraz nie trzeba w nieskończoność zgłaszać wyjątków w całej aplikacji ani tworzyć wyjątków wielopoziomowych try-catch. Zerowe bezpieczeństwo
// Java
public class Data {
    String value;

    String render() {
        if (value == null) {
            return "Value: undefined";
        } else {
            return "Value:" + value.toUpperCase();
        }
    }
}
// Kotlin
class Data {
    var value: String? = null
    fun render(): String =
            "Value: ${value?.toUpperCase() ?: "undefined"}"
}
Kotlin zajął się problemem NPE i wprowadził szereg wymagań:
  • wszystkie pola i zmienne klasy muszą zostać zainicjowane;
  • Możesz wpisać „null” w polu lub zmiennej, ale wtedy musisz wyraźnie powiedzieć, że twoja zmienna dopuszcza wartość null (wpisz znak „?”);
  • Operator Elvisa „?:” działa w ten sposób: jeśli po lewej stronie znajduje się Null, weź to, co jest po prawej stronie. W naszym przykładzie, gdy zmienna wartości nie została zainicjalizowana, zostanie przyjęta wartość „ niezdefiniowana ”.
Pola klas i dostęp do nich
// Java
public class Data {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
class App {
    void execute() {
           Data data = new Data()
           data.setValue("Foo")
     }
}
// Kotlin
class Data {
    var value: String = ""
}
class App {
    fun execute() {
          val data = Data()
          data.value = "Foo" // Под капотом выполнится data.set("Foo")
     }
}
W Kotlinie wystarczy po prostu opisać pole i gotowe: posiada ono już ukryte metody pobierające i ustawiające (hello lombok ), które w razie potrzeby można w każdej chwili przesłonić. Jednocześnie odczytujemy i modyfikujemy wartość pola, po prostu uzyskując do niego bezpośredni dostęp i pod maską nazywa się to get()|set(). Cykle
// Java
void example() {
    for(int i = 1; i <= 10; i++) {
        System.out.println(i);
    }

    for(String line : "a,b,c".split(",")) {
        System.out.println(line);
    }
}
// Kotlin
fun example() {
    for(i in 1..10) {
        println(i)
    }

    for(line in "a,b,c".split(",")) {
        println(line)
    }
}
Kotlin zapewnił wygodną i jednolitą składnię przechodzenia przez sekwencje: po prostu używasz zmiennej po lewej stronie , sekwencji po prawej i słowa kluczowego „ in ” pomiędzy nimi, typ jest określany automatycznie na podstawie zawartości. Singel
// Java
public class Singleton {
    private static Singleton ourInstance = new Singleton();

    public static Singleton getInstance() {
        return ourInstance;
    }

    private Singleton() {
    }
}
class App {
    void execute() {
         Singleton singleton = Singleton.getInstance()
    }
}
// Kotlin
object Singleton {}

class App {
    fun execute() {
          val singleton = Singleton
    }
}
Znany wzorzec „ singler ” jest dość często używany w praktyce, dlatego Kotlin zdecydował się stworzyć osobne słowo kluczowe „ obiekt ”, które jest zapisywane zamiast „ klasa ” i oznacza, że ​​klasa jest singletonem; po użyciu nawet nie musisz wywołać konstruktora lub jakąkolwiek inną metodę! Nazwane parametry metody i wartości domyślne
// Java
void setStatus(String code) {
    setStatus(code, "");
}

void setStatus(String code, String desc) {
    this.code = code;
    this.desc = desc;
}
// Kotlin
fun setStatus(code: String, desc: String = "") {
    this.code = code;
    this.desc = desc;
}

fun execute() {
    setStatus("200")
    setStatus(code = "200", desc = "Ok")
}
Zdarza się, że nie wszystkie parametry w metodzie lub konstruktorze muszą być wymagane, a w Javie jesteśmy przyzwyczajeni do tworzenia zestawu metod lub konstruktorów dla każdej możliwej kombinacji parametrów. Do Kotlina wprowadzono parametry domyślne, co pozwala zadeklarować 1 metodę i przekazać do niej wymagany zestaw parametrów w zależności od sytuacji. Strumienie
// Java
String getFirst(List<String> strings, String alpha) {
    return strings.stream()
            .filter(x -> x.startsWith(alpha))
            .findFirst()
            .orElse("");
}
// Kotlin
fun getFirst(strings: List<String>, alpha: String): String {
    return strings.first { it.startsWith(alpha) }
}
Wprowadzenie strumienia w Javie 8 stało się integralną funkcjonalnością podczas pracy z kolekcjami. W Kotlinie strumienie stały się jeszcze wygodniejsze i funkcjonalne: każda kolekcja ma już zestaw wygodnych, często używanych metod pracy z danymi. Zwróć także uwagę na wyrażenie lambda w pierwszej metodzie: jeśli literał funkcji ma dokładnie jeden parametr, jego deklarację można usunąć (wraz z ->) i nazwać  . Czas na podsumowanie... Zademonstrowałem tylko małą, podstawową część funkcjonalności, ale jestem pewien, że już chcesz wypróbować Kotlina! Z mojego doświadczenia mogę wyciągnąć następujące wnioski:
  • Programista Java może bardzo łatwo opanować składnię Kotlina i rozpocząć pisanie kodu;
  • Kotlin jest w pełni kompatybilny z Javą i możesz go już wypróbować w swoich istniejących projektach, na przykład w testach;
  • Kod Kotlina jest czystszy i bardziej czytelny, nie musisz pisać wielu schematów ;
  • IDEA posiada automatyczny konwerter Java na Kotlin, możesz pobrać gotowy kod Java i automatycznie przekonwertować go na Kotlin;
  • nowy projekt trzeba napisać w Kotlinie, bo z punktu widzenia infrastruktury jest to samo co Java, ale pod względem użytkowania jest lepszy i wygodniejszy!
Jeśli podobał Ci się ten artykuł i ogólnie rzecz biorąc, masz istotne informacje na temat zasobu o Javie, mogę kontynuować pisanie o doświadczeniach z używania Kotlina w prawdziwym projekcie korporacyjnym. Przydatne linki:
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION