Котлин против Явы – какая разница между ними?
Ява все еще может быть первым языком программирования, который приходит на ум, когда вы думаете об 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 против Java, последний предлагает более сжатый код – без findViewByIds
Если вы сравните класс Kotlin и класс Java, которые выполняют одну и ту же работу, то класс Kotlin, как правило, будет гораздо более кратким, но в частности, есть одна область, где Kotlin может серьезно сократить объем стандартного кода, который вам нужно написать: findViewByIds ,
Расширения Kotlin для Android позволяют импортировать ссылку на представление в файл действия, после чего вы сможете работать с этим видом, как если бы он был частью действия. Результат? Вам больше никогда не придется писать другой метод findViewById!
Прежде чем вы сможете использовать эти расширения, вам нужно добавить дополнительный плагин в файл build.gradle уровня модуля (примените плагин: ‘kotlin-android-extensions'), но после этого вы будете готовы начать импорт видов. Например, если ваш файл activity_main.xml содержал TextView с идентификатором textView, вы бы добавили в свою активность следующее:
import
Затем вы можете получить доступ к этому TextView, используя только его идентификатор:
textView.setText(
Это гораздо более кратко, чем эквивалент Java:
TextView text = (TextView) findViewById(R.id.textView); text.setText(
Kotlin по умолчанию является нулевым
Исключения NullPointerException являются огромным источником разочарования для разработчиков Java. Java позволяет вам присвоить значение NULL любой переменной, но если вы попытаетесь использовать ссылку на объект с нулевым значением, то приготовьтесь встретить исключение NullPointerException!
Также читайте: Kotiln для Android введение
В Kotlin все типы не обнуляются (не могут содержать нулевое значение) по умолчанию. Если вы попытаетесь присвоить или вернуть значение NULL в коде Kotlin, то произойдет сбой во время компиляции, поэтому ни одна из следующих строк не будет компилироваться:
val name:
fun getName(): String
Если вы действительно хотите присвоить пустое значение переменной в Kotlin, то вам нужно явно пометить эту переменную как nullable, добавив знак вопроса после типа:
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
Затем, когда вы создаете свойство, вы можете объявить, что функции getter и setter для этого конкретного свойства обрабатываются другим классом:
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 (капт) вместо аннотацииПроцессор. Например:
//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» в мастере создания проекта.
- Добавьте класс Kotlin в существующий каталог. Удерживая нажатой клавишу «Control», щелкните нужный каталог, затем выберите «Файл> Создать> Файл / класс Kotlin». Android Studio покажет баннер с просьбой настроить ваш проект для поддержки Kotlin; нажмите на ссылку «Настроить» и следуйте инструкциям на экране.
- Конвертировать существующие файлы Java в Kotlin. Вы можете запустить любой файл Java через конвертер Kotlin, щелкнув его, удерживая клавишу Control, и выбрав «Код> Преобразовать файл Java в файл Kotlin».
Завершение
Как вы можете видеть, есть много веских причин, чтобы предпочесть Kotlin Java, однако есть пара областей, где Java имеет преимущество. Возможно, наиболее примечательно: многие разработчики Android просто лучше знакомы с Java на данном этапе. Скорее всего, дебаты о Kotlin vs Java не скоро закончатся, поскольку у обоих будут свои достоинства. Итак, вы собираетесь перейти на Kotlin или считаете, что Java по-прежнему лучший вариант для разработки под Android? Дайте нам знать об этом в комментариях!
Читать далее: введение в синтаксис Java для разработки под Android
Источник записи: https://www.androidauthority.com