Рубрики
Без рубрики

Советы по переходу на Kotlin с Java

Если вы разрабатываете программное обеспечение на Java и заинтересованы в изучении Kotlin, вы, вероятно, проверили его… Помечен как kotlin, java.

Если вы разрабатываете программное обеспечение на Java и заинтересованы в изучении Kotlin, вы, вероятно, ознакомились с некоторым кодом Kotlin, особенно если вы знакомы с Android.

Помимо языкового сходства, есть несколько различий, которые кажутся сбивающими с толку, но поверьте мне, они приходят нам на помощь!

Поэтому я воспользуюсь этой статьей, чтобы поделиться некоторыми различиями между Kotlin и Java, сосредоточив внимание на вещах для людей, которые хотят Kotlin, вам интересно? Так что давайте перейдем к делу.

Эта статья представляет собой перевод статьи, написанной на бразильском португальском языке. Вы можете ознакомиться с оригиналом здесь.

Запуск программы только с помощью функции

Когда мы пишем Java-код и запускаем его, мы оказываем первое влияние:

class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }

}

Даже если ваша программа печатает только сообщение, основной метод очень подробный.

С Kotlin у нас другой подход:

fun main() {
    println("Hello World!")
}

Вот и все, этого кода достаточно, чтобы запустить наш Hello World! .

Действительное примечание: нам не нужен оператор ; on final of, он необязателен и не нужен.

Объявление переменной и ее типы

Когда переменные объявляются в Kotlin, мы должны решить, будет ли он изменяемым или нет, будучи var изменяемым и val неизменяемый:

var name = "Alex"
name = "Alex Felipe"
val age = 26
age = 26 // doesn't compile

Это одна из вещей, которые мне нравятся в Kotlin больше всего, потому что усилия по сохранению неизменности в кодовой базе намного меньше, чем подход Java, который использует final для этого.

Также обратите внимание, что нет необходимости объявлять тип переменной.

” Означает ли это, что переменные динамически типизируются?”

Как и Java, Kotlin имеет статическую типизацию, другими словами, когда переменная получает значение, неявно устанавливается тип, даже если у переменной явно не объявлен тип.

Следовательно, приведенный ниже код не компилируется:

var name = "Alex"
name = 10 // doesn't compile

Если вы любите писать явный код, не расстраивайтесь. Kotlin также позволяет объявлять тип переменной:

var name: String = "Alex"
name = "Alex Felipe"
val age: Int = 26
age = 26 // doesn't compile

Создание объектов

При работе с объектно-ориентированными языками необходимость создания объектов естественна, и в Java для этого нам нужно использовать new . Но в Kotlin new даже не является ключевым словом!

” Итак, как нам создать объект Kotlin?”

Рассматривая этот класс Java:

class Person {
    private String name;
    private int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Мы можем создать объект таким образом, используя Kotlin:

val alex = Person("Alex", 26)
val fran = new Person("Fran", 25) // doesn't compile

Это означает, что переменные с именем new могут быть скомпилированы на Kotlin.

Свойства вместо атрибутов

Помимо различий в создании экземпляра, Kotlin внес некоторые изменения в объявление класса. В этом примере Person class у нас есть name и возраст атрибуты для хранения состояния объекта.

Этот подход слишком распространен в Java и нескольких языках OO. Однако в Kotlin вместо объявления атрибутов мы объявляем свойства!

” Но в чем разница между атрибутом и свойством?”

Основное различие заключается в том, как осуществляется доступ к атрибутам. При работе с атрибутами хорошей практикой является реализация методов доступа в качестве геттеров и сеттеров для чтения или записи:

class Person {
    private String name;
    private int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Таким образом, мы избегаем манипулирования атрибутами непосредственно в классе без возможного фильтра.

Со свойствами это поведение по умолчанию:

class Person {
    var name: String
    var age: Int

    constructor(name: String, age: Int){
        this.name = name
        this.age = age
    }
}

Kotlin имеет более одного конструктора , первичного и вторичного. В этой реализации я использовал вторичный, но первичный является наиболее распространенным.

Другими словами, когда мы получаем доступ к name или age из класса Kotlin, на самом деле мы получаем доступ к сеттеру и получателю! Гораздо проще, не так ли?

Кроме того, в Java, если вы попытаетесь получить доступ к свойствам Kotlin, вы увидите только сеттеры и геттеры 😁

Изменение набора и получения свойств

Поначалу это различие может показаться странным, но чтобы быть более понятным, мы можем объявить методы доступа к свойствам:

class Person {
    var name: String
    set(value) {
        field = value
        println("Setting the name $value")
    }
    get() {
        println("Getting the name $field")
        return field
    }
    var age: Int

    constructor(name: String, age: Int){
        this.name = name
        this.age = age
    }
}

Запуск примера кода ниже:

val alex = Person("Alex", 26)
alex.name = "Alex Felipe"
println(alex.name)

Мы получаем следующий результат:

Setting the name Alex
Setting the name Alex Felipe
Getting the name Alex Felipe
Alex Felipe

Обратите внимание, что даже сам класс во время построения объекта также напрямую обращается к установщику свойства!

Еще один момент, на который следует обратить внимание, внутри set и get , мы использовали field для присвоения и получения значения свойства, т.е. field представляет реальный атрибут и может быть доступен только в области свойств!

Поэтому, если мы не изменим значение field , значение реального свойства не изменится.

set(value) {
    println("Setting the name $value")
}

Выполняя тот же тест, мы получаем следующий результат:

Setting the name Alex
Setting the name Alex Felipe
Getting the name null
null

Строка шаблона

Еще одна особенность Kotlin – это способ объединения String .

Обратите внимание, что мы помещаем все содержимое в "" без использования оператора + .

Этот метод вызывается как Шаблон Строка , также известная как интерполяция строк на других языках.

В принципе, через шаблон String , мы можем встроить код в String , либо только для чтения значения , либо для выполнения инструкции, возвращающей значение:

println("1 + 2 = ${1 + 2}")

В этом случае нам нужно поместить весь код в {} и мы получаем следующий результат:

1 + 2 = 3

Это правило необходимо, когда мы также обращаемся к членам объекта:

println("My name is ${alex.name}")

Вывод

Помимо советов, приведенных в этой статье, Kotlin предлагает множество других функций и отличий по сравнению с Java. Большинство из них были созданы для того, чтобы помочь нам писать и читать меньше кода и получать больше результатов!

Понравились ли вам эти советы? Если да, оставьте свой лайк, оставьте комментарий и поделитесь этой статьей 😉

Оригинал: “https://dev.to/alexfelipe/tips-to-migrate-from-java-to-kotlin-59af”