...
🤳 Блог Android новостей, посвященный советам экспертов, новостям, обзорам, телефонам Android, приложениям, инструкциям, планшетам и мобильным телефонам.

Котлин против Java – в чем разница между ними?

1 525

Java все еще может быть первым языком программирования, который приходит на ум, когда вы думаете об Android, но вам не обязательно использовать Java для разработки под Android. Фактически, Kotlin теперь является предпочтительным  официальным языком Google для Android!

Чтобы узнать больше о Java, пройдите бесплатный вводный курс по Java на сайте Make Android Apps.

Сегодня Android Studio поставляется со встроенной поддержкой Kotlin, поэтому создать проект Android, который понимает код Kotlin, так же просто, как установить флажок в мастере создания проекта Android Studio. Поддержка опциона слишком высока, так что теперь это решение в основном сводится к предпочтениям.

Но если вы действительно перейдете с Java на Kotlin, что именно вы получите? Какие функции есть у Kotlin, а у Java нет, и наоборот?

В этой статье мы рассмотрим все основные различия между Kotlin и Java.

Kotlin vs Java, последний предлагает более сжатый код – без findViewByIds

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

Расширения Kotlin для Android позволяют импортировать ссылку на представление в файл действия, после чего вы сможете работать с этим представлением, как если бы оно было частью действия. Результат? Вам больше никогда не придется писать еще один метод findViewById!

Прежде чем вы сможете использовать эти расширения, вам необходимо добавить дополнительный плагин в файл build.gradle на уровне модуля (примените плагин: ‘kotlin-android-extensions'), но после этого вы готовы начать импорт представлений. Например, если ваш файл activity_main.xml содержит TextView с идентификатором textView, вы должны добавить в Activity следующее:

import

Затем вы можете получить доступ к этому TextView, используя только его идентификатор:

textView.setText(

Это намного лаконичнее, чем эквивалент в Java:

TextView text = (TextView) findViewById(R.id.textView); text.setText(

Kotlin по умолчанию является нулевым

NullPointerExceptions – огромный источник разочарования для разработчиков Java. Java позволяет присвоить значение null любой переменной, но если вы попытаетесь использовать ссылку на объект, имеющую нулевое значение, приготовьтесь к возникновению исключения NullPointerException!

Также читайте: Введение в Kotiln для Android

В Kotlin все типы по умолчанию не допускают значения NULL (не могут содержать значение NULL). Если вы попытаетесь присвоить или вернуть null в своем коде Kotlin, он завершится ошибкой во время компиляции, поэтому ни одна из следующих строк не будет компилироваться:

val name: 
fun getName(): String 

Если вы действительно хотите присвоить значение NULL переменной в Kotlin, вам необходимо явно пометить эту переменную как допускающую значение NULL, добавив знак вопроса после типа:

val number: Int? = 

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

Функции расширения

Kotlin дает разработчикам возможность расширить класс новыми функциями, что идеально, если есть класс, в котором, как вы всегда считали, отсутствует важный метод!

Эти «функции расширения» недоступны в Java, хотя они доступны на других языках программирования, которые вы можете использовать для разработки под Android, например C #.

Читать дальше: Руководство по Java для начинающих

Вы создаете функцию расширения, добавляя префикс имени класса, который вы хотите расширить (например, ‘String'), к имени создаваемой функции (‘styleString'), например:

fun 

Затем вы можете вызвать эту функцию для экземпляров расширенного класса через. обозначение, как если бы оно было частью этого класса:

myString.styleString()

Корутины – первоклассные граждане

Каждый раз, когда вы инициируете длительную операцию, такую ​​как сетевой ввод-вывод или интенсивная работа с ЦП, вызывающий поток блокируется до завершения операции. Поскольку Android по умолчанию является однопоточным, как только вы заблокируете основной поток, пользовательский интерфейс вашего приложения зависнет и не будет отвечать до тех пор, пока операция не завершится.

В Java решение традиционно заключалось в создании фонового потока, в котором вы могли бы выполнять эту интенсивную или длительную работу, но управление несколькими потоками может привести к сложному, подверженному ошибкам коду, а создание нового потока – дорогостоящая операция.

Хотя вы можете создавать дополнительные потоки в Kotlin, вы также можете использовать сопрограммы. Сопрограммы выполняют длительные и интенсивные задачи, приостанавливая выполнение в определенный момент, не блокируя поток, а затем возобновляя эту функцию позже, возможно, в другом потоке. Это позволяет создавать неблокирующий асинхронный код, который выглядит синхронным и, следовательно, более четким, кратким и удобочитаемым. Сопрограммы также не имеют стеков, поэтому они потребляют меньше памяти по сравнению с потоками и открывают двери для дополнительных стилей асинхронного неблокирующего программирования, таких как async / await.

Нет проверенных исключений

В Kotlin нет проверенных исключений, поэтому вам не нужно перехватывать или объявлять исключения.

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

Встроенная поддержка делегирования

Kotlin, в отличие от Java, поддерживает шаблон проектирования «композиция вместо наследования» через делегирование первого класса (иногда известное как неявное делегирование). Делегирование – это когда получающий объект делегирует операции второму объекту-делегату, который является вспомогательным объектом с исходным контекстом.

Делегирование классов Kotlin – это альтернатива наследованию, позволяющая использовать множественное наследование. Между тем, делегированные свойства Kotlin помогают предотвратить дублирование кода, например, если вам нужно повторно использовать один и тот же код для нескольких методов получения и установки свойств, тогда вы можете извлечь этот код в делегированное свойство. Делегат свойства должен определить операторную функцию getValue и, необязательно, оператор setValue:

class

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

class MyClass 

Классы данных

В проекте нет ничего необычного в наличии нескольких классов, которые ничего не делают, кроме хранения данных. В Java вы обнаружите, что пишете много шаблонного кода для этих классов, хотя сами классы имеют очень небольшую функциональность. Как правило, вам необходимо определить конструктор, поля для хранения данных, функции получения и установки для каждого поля, а также функции hashCode(), equals () и toString ().

В Kotlin, если вы включите ключевое слово data в определение вашего класса, компилятор выполнит всю эту работу за вас, включая создание всех необходимых геттеров и сеттеров:

data class Date(var month:String, var day: Int)

Умные броски

В Java вам часто приходится проверять тип и затем приводить объект в ситуациях, когда уже ясно, что объект может быть приведен.

Интеллектуальные преобразования Kotlin могут обрабатывать эти избыточные преобразования для вас, поэтому вам не нужно выполнять приведение внутри оператора, если вы уже проверили его с помощью оператора Kotlin ‘is'. Например, компилятор знает, что следующее приведение безопасно:

if

Поддержка конструкторов

В отличие от Java, класс Kotlin может иметь первичный конструктор и один или несколько вторичных конструкторов, которые вы создаете, включая их в объявление класса:

class MainActivity constructor(firstName: String) 

Нет поддержки неявных расширяющих преобразований

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

Библиотеки обработки аннотаций с Kotlin

Kotlin поддерживает все существующие фреймворки и библиотеки Java, включая расширенные фреймворки, которые полагаются на обработку аннотаций, хотя некоторые библиотеки Java уже предоставляют расширения Kotlin, такие как RxKotlin.

Если вы действительно хотите использовать библиотеку Java, которая полагается на обработку аннотаций, то ее добавление в проект Kotlin немного отличается, поскольку вам нужно указать зависимость с помощью плагина kotlin-kapt, а затем использовать инструмент обработки аннотаций Kotlin (kapt) вместо annotationProcessor. Например:

//Apply the plugin//

Взаимозаменяемость с Java

Обсуждая, использовать ли Kotlin или Java для разработки под Android, вы должны знать, что есть третий вариант: использовать оба. Несмотря на все различия между двумя языками, Java и Kotlin на 100% совместимы. Вы можете вызывать код Kotlin из Java, и вы можете вызывать код Java из Kotlin, поэтому можно иметь классы Kotlin и Java бок о бок в одном проекте, и все будет по-прежнему компилироваться.

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

Если вы действительно хотите попробовать Kotlin сами, то, если у вас установлена Android Studio 3.0 Preview или выше, вы можете начать работу несколькими способами:

  • Создайте новый проект Android Studio. Самый простой способ – создать новый проект и установить флажок «Включить поддержку Kotlin» в мастере создания проекта.

Котлин против Java - в чем разница между ними?

  • Добавьте класс Kotlin в существующий каталог. Щелкните нужный каталог, удерживая клавишу Control, затем выберите «Файл> Создать> Файл / класс Kotlin». Android Studio отобразит баннер с просьбой настроить проект для поддержки Kotlin; щелкните ссылку «Настроить» и следуйте инструкциям на экране.

Котлин против Java - в чем разница между ними?

  • Преобразуйте существующие файлы Java в Kotlin. Вы можете запустить любой файл Java через конвертер Kotlin, щелкнув файл, удерживая клавишу Control, и выбрав «Код> Преобразовать файл Java в файл Kotlin».

Котлин против Java - в чем разница между ними?

Подведение итогов

Как видите, есть много веских причин предпочесть Kotlin Java, однако есть несколько областей, в которых Java имеет преимущество. Возможно, наиболее примечательно: многие разработчики Android просто больше знакомы с Java на данный момент. Скорее всего, дебаты о Kotlin и Java не урегулируются в ближайшее время, поскольку оба имеют свои достоинства. Итак, собираетесь ли вы перейти на Kotlin или считаете, что Java по-прежнему является лучшим вариантом для разработки под Android? Дайте нам знать об этом в комментариях!

Читать дальше: введение в синтаксис Java для разработки под Android

Источник записи: https://www.androidauthority.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее