Котлин против Явы - какая разница между этими двумя?

Автор: John Stephens
Дата создания: 24 Январь 2021
Дата обновления: 1 Июль 2024
Anonim
Нужно ли изучать Kotlin и как это лучше делать?
Видео: Нужно ли изучать Kotlin и как это лучше делать?

Содержание


Ява все еще может быть первым языком программирования, который приходит на ум, когда вы думаете об 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, то вы добавили бы в свою активность следующее:

импорт kotlinx.android.synthetic.main.activity_main.textView

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

textView.setText («Hello World»)

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

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

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

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


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

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

val name: String = null

fun getName (): String = null

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

Val номер: Int? = ноль

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

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

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

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

Читать дальше: Учебник по Java для начинающих

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

fun String.styleString (): String {// Стилизуем строку и затем возвращаем ее //}

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

myString.styleString ()

Сопрограммы - первоклассные граждане

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

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

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

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

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

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

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

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

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

делегат класса {operator fun getValue (...) ... ... ...} оператор fun setValue (...) ... ... ...}}

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

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

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

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

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

Дата класса данных (переменная месяц: строка, переменная день: Int)

Умные броски

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

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

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

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

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

Конструктор класса MainActivity (firstName: String) {}

Нет поддержки для неявных расширений конверсий

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

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

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

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

// Применим плагин // apply plugin: kotlin-kapt // Добавить соответствующие зависимости, используя конфигурацию kapt // dependencies {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

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

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

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

Если вы действительно хотите попробовать 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 и Java не закончатся в ближайшее время, поскольку у обоих будут свои достоинства. Итак, вы собираетесь перейти на Kotlin или считаете, что Java по-прежнему является лучшим вариантом для разработки под Android?

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

Мы влюбились в этот ноутбук во время нашей практической сессии на выставке CE 2019 в январе. Acer называет wift 7 самым тонким ноутбуком на рынке, его толщина составляет 0,4 дюйма, а его вес составляе...

Если вы любите боевики, вы найдете много интересного, если подпишетесь на сервис потокового видео Hulu. Есть много фильмов для наслаждения, в которых есть быстрые машины, взрывы, драки и острые одност...

Публикации