PIG DATA

Почему язык Kotlin? Чем он так хорош?

Почему язык Kotlin? Чем он так хорош?

Если бы сегодня нас спросили, что является одной из характеристик, которая отличает разработку приложений для Android от остальных областей, мы бы без колебаний ответили, что возможность выполнения одного и того же приложения на устройствах с другим оборудованием нативным способом один из них; но как это возможно? Сегодня мы познакомим вас с преимуществами языка Kotlin.

На данный момент никого не удивляет, что одно и то же веб-приложение работает на любом устройстве и на любой платформе (Android, iOS, Windows, MacOS...), мы все знаем, что эти приложения медленнее и нестабильнее, чем любое родное приложение; но взамен нам нужно разработать только одно приложение для всех платформ.

Аналогичная проблема возникла бы, если бы мы говорили о количестве различных устройств, на которых сейчас работает Android; если бы это не было из-за Java. Мощь Java и тот факт, что сегодня она используется в миллиардах устройств, ее способность работать на любом устройстве независимо от его аппаратного и программного обеспечения, если у него есть интерпретатор псевдокомпилируемого кода, сгенерированного компилятором Java.

Официальным интерпретатором Java является виртуальная машина Java, хотя на Android в первых версиях использовался Dalvik, а сегодня ART.

Java — решение всех проблем?

К сожалению, нет ничего более далекого от истины. Хотя Java решает проблему взаимодействия между устройствами, она открывает новый ряд головных болей, которые мы хотели бы убрать из уравнения, некоторые из них:

Нет встроенной поддержки необязательных параметров

Хотя она есть для неизменяемых коллекций. Несмотря на наличие класса Optional, его использование подразумевает генерацию большого количества шаблонного кода, который мы могли бы сэкономить, если бы поддержка опций была встроена в сам язык, а не как его расширение.

Отсутствует нативная поддержка функционального программирования: в Java есть Stream Api (повторюсь, он поддерживается только в Android, начиная с API 24), но его интеграция в язык похожа на факультативную, плохо существует в объекты, связанные с примитивными типами (IntStream, DoubleStream...), и через класс Stream  для всех остальных объектов.

Поддержка анонимных функций (Lambdas). Хотя в Java 8 реализована поддержка функций Lambda, они не являются первоклассными; это означает, что, хотя мы можем использовать лямбда-выражения для реализации анонимных интерфейсов с помощью одного метода, Java не поддерживает передачу функций в качестве аргументов метода.

Кроме того, отсутствие вывода типа делает формулировку Lambdas довольно неудобной, особенно при попытке симулировать такие функции, как композиция функций или каррирование; отсутствие их поддержки в языке.

Обнуляемость типов: хотя это может быть включено в раздел, относящийся к необязательным параметрам, размер этой проблемы заслуживает особого упоминания. Сколько Java-программистов не заполнили свой код if (foo! = Null), чтобы попытаться бороться со страшным NullPointerException? (На самом деле, его создатель извинился за то, что он называет «ошибкой на миллиард долларов»). И сколько из этих проверок — это больше, чем исправления, чтобы избежать сбоя в нашем приложении?

Привязка ручных представлений: хотя эта проблема специфична для Android как платформы, а не для Java как языка, также стоит указать на количество шаблонного кода, необходимого для получения ссылки на представление Android. Хотя нам удалось избавиться от ненавистного findViewById (int id) благодаря привязке данных, нам все равно нужно хранить ссылку на эту привязку.

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

Многие из этих проблем, хотя и решены в Java 8 и 9, недоступны в Android SDK ниже API 24, что делает их практически непригодными для использования.

Почему язык Kotlin справляется со всем этим?

Именно по всем этим причинам сегодня Java считается языком, который, по крайней мере, в разработке Android, не развивается с той скоростью, с которой развивается индустрия.

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

В этом направлении было исследовано много возможностей, некоторые из них связаны с использованием Swift или Scala, хотя ни одна из них не была многообещающей.

Все это изменилось с появлением языка Kotlin.

Kotlin — это язык, разработанный и разработанный Jetbrains, ориентированный на то, чтобы быть современным языком, находящимся в постоянной эволюции. и, прежде всего, это может быть выполнено на JVM. Это делает его идеальным кандидатом для использования на Android.

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

Опции.

Они встроены в Kotlin, все, что вам нужно сделать, это объявить тип переменной, оканчивающейся знаком вопроса? поэтому он становится необязательным типом. Язык Kotlin также предоставляет возможность безопасного развертывания этих опций listener?.onSuccess() без проверки наличия значения для этой опции, а также предоставляет оператор Элвиса.

Функциональное программирование: в Kotlin мы находим встроенную поддержку для работы с коллекциями и наборами данных, такими как Streams. Мы можем напрямую вызывать .flatMap {} в коллекции, а также .filter {}, .map {} и многие другие. Вывод типов делает использование лямбда-выражений особенно удобным.

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

inline fun <T, R> Iterable.map(transform: (T) -> R): List (source)


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

transform: (T) -> R

Это означает, что у функции map есть параметр с именем transform, который сам по себе является функцией, имеющей входной параметр типа T и возвращающей объект типа R.

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


collection.map { item -> aTransformation(item) }



Этот фрагмент кода вернет коллекцию элементов типа, возвращаемого aTransformation.


Обнуляемость типов: в языке Kotlin, поскольку в языке есть встроенная поддержка необязательных параметров, в нашем коде должно быть минимально возможное количество обнуляемых значений. Но даже при этом, если он существует, Kotlin предлагает нам инструменты для борьбы с ними проще, чем в Java. Например, у нас есть безопасный вызов оператора (?), чтобы избежать исключения NullPointerException при доступе к необязательным параметрам, или оператор безопасного приведения, чтобы защитить нас в случае желания выполнить приведение.

Компилятор Kotlin, кроме того, заставляет контролировать типы, которые могут иметь значение null, и даже вводит проверки во время выполнения на случай совместимости с Java-кодом.

Привязка представлений: это специфическая проблема Android, поэтому Jetbrains предлагает нам расширения Kotlin Android; официальная библиотека поддержки для упрощения этой проблемы (и некоторых других) с помощью плагина gradle.

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

Kotlin, разработка
206 просмотров

0 комментариев
Последние

Кликните на изображение чтобы обновить код, если он неразборчив
Комментариев пока нет
PIG DATA
Community о Хрюшах, событиях, технологиях и IT. Создан для людей и маленьких Хрюшек.