- Частые вопросы
- Что такое Kotlin?
- Какова текущая версия Kotlin?
- Свободен ли Kotlin?
- Является ли Kotlin обьектно-ориентированным или функциональным?
- Какие преимущества есть у Kotlin по сравнению с Java?
- Совместим ли Kotlin с Java?
- Для чего я могу использовать Kotlin?
- Можно ли использовать Kotlin для разработки для Android?
- Можно ли использовать Kotlin для разработки серверных приложений?
- Можно ли использовать Kotlin для веб-разработки?
- Можно ли использовать Kotlin для разработки Desktop-приложений?
- Можно ли использовать Kotlin для нативной разработки?
- Какие IDE поддерживают Kotlin?
- Какие инструменты для сборки поддерживают Kotlin?
- Во что может компилироваться и транслироваться Kotlin?
- Kotlin поддерживает лишь Java 6?
- Сложен ли Kotlin?
- Какие компании используют Kotlin?
- Кто разрабатывает Kotlin?
- Где можно узнать больше про язык?
- Существуют ли книги про Kotlin?
- Есть ли онлайн-курсы для изучения Kotlin?
- Есть ли сообщество у Kotlin?
- Проходят ли какие-то мероприятия по Kotlin?
- Проходят ли конференции, посвящённые Kotlin?
- Есть ли Kotlin в социальных сетях?
- Есть ли ещё какие-либо онлайн-ресурсы по Kotlin?
- Kotlin Native — подключение пользовательской динамической библиотеки на языке C
- Kotlin Multiplatform for Mobile Development: когда стандартная нативная разработка уходит в историю
- Самая острая проблема
- Пути решения
- Преимущества по сравнению с Native
- И всё-таки почему Kotlin/Native?
Частые вопросы
Что такое Kotlin?
Kotlin — OSS-статически типизированный язык программирования с поддержкой JVM, Android, JavaScript и Native. Язык разработан JetBrains. Проект начался в 2010 и с самого начала был открытым. Версия 1.0 была выпущена в феврале 2016 г.
Какова текущая версия Kotlin?
Последняя выпущенная версия — 1.3.40, опубликована в 19 июня 2019 г.
Свободен ли Kotlin?
Да. Kotlin был, есть и будет свободным. Он разрабатывается под лицензией Apache 2.0, а исходный код доступен на GitHub.
Является ли Kotlin обьектно-ориентированным или функциональным?
Kotlin является и тем, и другим. Вы можете как угодно использовать и комбинировать эти стили. При полной поддержке таких возможностей, как функции высшего порядка, функциональные типы и лямбда-выражения, Kotlin — отличный выбор, если вы используете или изучаете функциональное программирование.
Какие преимущества есть у Kotlin по сравнению с Java?
Kotlin более лаконичен. Код на Kotlin примерно на 40% короче. Также Kotlin является типобезопасным. Благодаря null-безопасности приложения менее уязвимы к NullPointerException. В списке других возможностей: умное приведение типов, функции высшего порядка, функции-расширения и лямбда-выражения с получателями. Они позволяют писать выразительный код и поддерживать создание DSL.
Совместим ли Kotlin с Java?
Да, Kotlin на 100% совместим с Java. Возможности вашего существующего кода на Java правильно взаимодействовать с Kotlin уделено много внимания. Вы можете запросто вызывать код на Kotlin из Java и наоборот. Благодаря этому, внедрение Kotlin в проект намного проще и безопасней. Также стоит отметить автоматический конвертер кода из Java в Kotlin. Он встроен в IDE и позволяет упростить переход существующего кода на Kotlin.
Для чего я могу использовать Kotlin?
Kotlin может быть использован для разработки для множества платформ, будь то сервер, клиент, веб или Android. C релизом Kotlin/Native (который на текущий момент в разработке) появится поддержка таких платформ, как встроенные системы, macOS и iOS. Люди используют Kotlin для мобильных и серверных приложений, клиентских приложений с JavaScript или JavaFX, в data science и так далее.
Можно ли использовать Kotlin для разработки для Android?
Можно. Kotlin поддерживается как основной язык для Android, наравне с Java. Сотни приложений для Android уже используют Kotlin, к примеру Basecamp, Pinterest и так далее. Чтобы узнать больше, смотрите статью про разработку для Android.
Можно ли использовать Kotlin для разработки серверных приложений?
Можно. Kotlin на 100% совместим с JVM, а значит вы можете использовать любые фреймворки для Java, такие как Spring Boot, vert.x или JSF. Также есть фреймворки для Kotlin, как например Ktor. Смотрите статью о разработке серверных приложений.
Можно ли использовать Kotlin для веб-разработки?
Да. Кроме использования в бэкэнде, вы также можете использовать Kotlin/JS для клиентской стороны. Kotlin может использовать определения из DefinitelyTyped для статической типизации для популярных библиотек на JavaScript. Также Kotlin совместим с модульными системи, такими как AMD и CommonJS. Смотрите статью о разработке для клиентской стороны.
Можно ли использовать Kotlin для разработки Desktop-приложений?
Да. Вы можете использовать любой UI-фреймворк, например JavaFx, Swing и т.д. В добавок, существуют фреймворки для Kotlin, такие как TornadoFX.
Можно ли использовать Kotlin для нативной разработки?
Kotlin/Native в текущий момент в разработке. Kotlin/Native позволит компилировать исходный код в нативный, который может работать без виртуальной машины. На данный момент готова технологическая демо-версия, но она еще не готова к продакшену и не поддерживает некоторые платформы, которые запланированы к версии 1.0. Смотрите пост, анонсирующий Kotlin/Native.
Какие IDE поддерживают Kotlin?
Kotlin поддерживается всеми крупными IDE для Java, включая IntelliJ IDEA, Android Studio, Eclipse и NetBeans. Также доступен отдельный компилятор, полностью поддерживающий все возможности компиляции и запуска приложений.
Какие инструменты для сборки поддерживают Kotlin?
На стороне JVM — Gradle, Maven, Ant и Kobalt. Также есть множество инструментов со стороны JavaScript.
Во что может компилироваться и транслироваться Kotlin?
В Java-байткод и ES5.1, поддерживаемый модульными системами AMD and CommonJS. Скоро появится возможность компилировать в код для конкретной платформы с LLVM.
Kotlin поддерживает лишь Java 6?
Не только. Вы можете выбирать между байткодом 6 или 8 версии. Чем новее версия Java, тем лучше и эффективнее байткод.
Сложен ли Kotlin?
Kotlin похож на Java, C#, JavaScript, Scala и Groovy. Мы пытались сделать Kotlin простым для изучения, чтобы на него можно было перейти всего за неколько дней. Более детальное изучение языка займёт немного больше времени, но в общем это несложный язык.
Какие компании используют Kotlin?
Kotlin используют множество компаний. Из числа тех, что обьявили об использовании языка: Square, Pinterest, Basecamp и Corda.
Кто разрабатывает Kotlin?
Kotlin разрабатывается в основном группой инженеров JetBrains (более чем 40 человек). Главный разработчик — Андрей Бреслав. В дополнение к команде, на GitHub есть примерно 100 активных вкладчиков.
Где можно узнать больше про язык?
Лучше всего начать прямо на этом сайте или на https://kotlinlang.org. На kotlinlang.org можно скачать компилятор или попробовать его онлайн Доступны справочник и туториалы.
Существуют ли книги про Kotlin?
Список книг есть здесь. Из самых популярных: Kotlin в Действии, написанная членами команды разработчиков Дмитрием Джемеровым и Светланой Исаковой, а также Kotlin for Android Developers.
Есть ли онлайн-курсы для изучения Kotlin?
Pluralsight Kotlin Course от Кевина Джонса, курс O’Reilly от Хади Харири и курс Udemy от Петра Соммерхоффа.
Также есть множество записей Kotlin talks, которые можно найти на YouTube и Vimeo.
Есть ли сообщество у Kotlin?
Да. У Kotlin очень отзывчивое сообщество на форумах Kotlin, StackOverflow и, наиболее активно, Kotlin Slack (примерно 7000 участников в мае 2017).
Проходят ли какие-то мероприятия по Kotlin?
Да. Сейчас много пользовательских групп и митапов, которые сосредоточены на Kotlin. Список данных мероприятий можно найти на этом сайте. Также во всем мире проводятся специальные мероприятия — Kotlin Nights
Проходят ли конференции, посвящённые Kotlin?
Да. Первая официальная конференция — KotlinConf — прошла в Сан-Франциско со 2 по 3 ноября 2017 года. Kotlin также обсуждается во время различных конференций по всему миру. Вы можете найти список ближайших конференций на этом сайте.
Есть ли Kotlin в социальных сетях?
Наиболее активный аккаунт на Twitter. Также есть группа Google+.
Есть ли ещё какие-либо онлайн-ресурсы по Kotlin?
В сообществе Kotlin вы можете найти множество ресурсов, включая Дайджесты Kotlin, организуемые сообществом, новостную рассылку, подкаст и так далее.
Kotlin Native — подключение пользовательской динамической библиотеки на языке C
Как вы можете знать, уже широко известный язык программирования Kotlin предоставляет возможность создания программ для различных платформ: JVM, JS и Native, последний из которых на сегодняшний день подвергается активному развитию. С релизом Kotlin 1.3 проект Kotlin Native вышел в стадию beta.
И как можно догадаться из названия, Kotlin Native позволяет писать и компилировать код на Kotlin под нативные платформы, например iOS или Linux, что предоставляет широкие возможности для создания мультиплатформенных проектов с единой кодовой базой.
Помимо компиляции Kotlin под конкретную платформу, имеется возможность использовать уже готовые нативные библиотеки, например, на языке C, что избавляет разработчиков от необходимости заново переписывать целые проекты.
В данной статье приводится пример простейшего проекта для Kotlin Native, в котором производится вызов функций из уже скомпилированной пользовательской динамической библиотеки, которая была написана на языке С.
- ОС Ubuntu 16.04
- IDE IntelliJ IDEA 2018.3.2 (Community Edition)
- Gradle плагин для сборки проекта kotlin-multiplatform 1.3.40
Очень важно, что статья актуальна для конкретной версии Gradle плагина для сборки проекта. Поскольку на момент написания статьи технология Kotlin Multiplatform всё ещё является экспериментальной, то в будущем вполне возможны изменения как в плагине для сборки, в самой технологии, так и непосредственно в языке Kotlin.
Пользовательская динамическая библиотека
Kotlin Multiplatform for Mobile Development: когда стандартная нативная разработка уходит в историю
Самая острая проблема
За последние годы программирование развивается семимильными шагами. Технологии разработки, которые еще недавно считались современными и даже перспективными, уже сейчас сменяются более новыми и уходят в историю. Несмотря на этот постоянно работающий двигатель прогресса и частые изменения и усовершенствования, вопрос сокращения издержек на разработку приложений остается открытым. Тем не менее, ребята из JetBrains совершили невероятную попытку оптимизации трудозатрат при создании мобильных приложений. А именно, они взялись за стоявшую уже достаточно давно проблему переиспользования уже написанного кода, которая до сих пор остается актуальной, причём не только в пределах одной платформы, но и между разными. Мы заведем речь об основных мобильных платформах об основных мобильных платформах — iOS и Android.
Почему эта проблема достаточно остро стояла в последнее время? Возможность переиспользования кода способна существенно ускорить и оптимизировать процесс написания любого приложения, особенно по сравнению с популярной сейчас нативной разработкой приложения, которая хотя и считается одной из наиболее удобных, проверенных и доступных технологий для компаний-разработчиков, тем не менее не подразумевает переиспользование кода даже в теории. В этом случае приложения получаются полностью независимыми друг от друга с отдельной кодовой базой для iOS и для Android. Получение правки на одной платформе совсем не означает, что на другой платформе эта правка априори будет сделана быстрее.
Пути решения
Если рассмотреть поднятую проблему, то можно выделить два основных пункта: использование одного и того же кода на обеих платформах и непосредственно само переиспользование. Одно из препятствий для использования единого кода: разные языки программирования, на которых пишутся приложения для платформ. Для Android это Java и Kotlin, а для iOS используются ObjectiveC и Swift — совершенно ничего общего, и просто просто взять один и тот же код и преподнести его компилятору для другой платформы не получится. Однако, сегодня разработчик может это препятствие преодолеть, причем несколькими путями:
Каждый из способов имеет собственные недостатки и преимущества. Xamarin и React Native добавляют дополнительную абстракцию от платформ. Они усложняют работу с самой платформой и не дают использовать обширный набор библиотек от нативного iOS/Android-сообщества. В случае с Xamarin появляется зависимость от разработчиков платформы, и поддержку новых версий iOS/Android должны выпустить именно они. React Native же пишется на языке JavaScript, при этом теряется производительность, а сам язык программирования открывает много возможностей для ошибок (не типобезопасный и некомпилируемый). Старый гугловский инструмент J2ObjC не предоставляет возможности использовать функционал iOS-платформы из Java.
Последнее решение, Kotlin/Native, лишено подобных недостатков, в связи с чем имеет заметные преимущества перед остальными, кроме того сам язык Kotlin по сравнению с Java гораздо более краткий и лаконичный язык, а код, написанный на нем, проще и компактнее, чем выполняющий ту же задачу код, написанный на Java.
Мы пришли к выводу, что для использования одного и того же кода на обеих платформах, Android и iOS, наиболее удобная технология на данный момент — это Kotlin/Native. Однако вопрос, достаточно ли этого, чтобы успешно переиспользовать код остается открытым. На данном этапе приходится сталкиваться с ещё одним препятствием: разное API разных платформ. Это значит, что даже несмотря на то, что код написан один, всё равно придётся писать еще и дополнительный код под разные платформы, пусть и на едином языке, Kotlin. В таком случае приходится делать дополнительную работу, а в итоге мы получаем:
1) исходный common-код, в котором сам код не обращается к платформенным
библиотекам и является одинаковым и на Android, и на iOS;
2) iOS-Platform-код, в котором делаются обращения к платформенным библиотекам iOS (например, запросы к серверу);
3) Android-Platform код, в котором также делаются обращения к android-фреймворку: (те же запросы к серверу).
Т.е. получается, что для работы общего кода нужно, чтобы при компиляции под Android дополнительно был и код Android-Platform, а при компиляции под iOS соответствующий iOS-Platform-код. Причина заключается в том, что сам по себе common-код неполноценен и не может решить даже простейшую и наиболее популярную задачу мобильных приложений: отправить запрос на сервер, а контролировать вручную эти процессы достаточно трудоемко. Команда JetBrains смогла предположить подобную проблему и предусмотрела её решение, поэтому помимо добавления Kotlin на различные платформы, была предоставлена и возможность создания мультиплатформенных проектов.
За счет специальной конфигурации проекта теперь есть возможность сделать проект, который будет компилироваться в Android-библиотеку со специфичным кодом именно для Android, а в iOS-фреймворк с соответствующим кодом для iOS. В итоге получается, что с технической точки зрения, проблем для использования одного кода на iOS и Android одновременно больше нет. При отладке кода его нужно будет править лишь один раз, и исправления произойдут сразу на обеих платформах. Однако на нативной стороне приложений остается то, что и не обобщить без потери качества, а именно:
— Привязка интерфейса к общим viewmodel из библиотеки общего кода;
— Платформозависимые фичи: работа с камерой, NFC, Touch ID или Bluetooth.
Преимущества по сравнению с Native
Конечно нельзя сказать, что у продукта JetBrains совсем нет никаких недостатков. Например стоит отметить, что уже большое количество разработчиков используют нативный способ разработки и наработали на нем сравнительно немало опыта, т.е. скорее всего компании не потребуется выделять дополнительные накладные расходы на обучение разработчика новой технологии, чего, к сожалению, нельзя сказать о Kotlin/Native, когда определенные образовательные расходы вполне вероятны. Также при чисто нативной разработке можно использовать любой из множества уже проверенных архитектурных подходов, учитывающих конкретную платформу, можно использовать большое количество нативных библиотек без какой-либо дополнительной работы. В то время как в случае с Kotlin/Native при желании использовать нативную библиотеку в общем коде необходимо будет прибегнуть к Expect/Actual реализации.
Тем не менее, несмотря на пока ещё слабое распространение среди нынешних разработчиков и некоторые проблемы, присущие всем новым технологиям, Kotlin Multiplatform вместе с Kotlin/Native по сути универсализирует разработку на Android и iOS, что, самое главное, помогает уменьшить общее количество ресурсов, необходимых для программирования приложения на обе платформы, при этом не снижая планку качества разработки. Таким образом компания, внедрившая в работу эти технологии, получает дополнительную экономию в бюджете, что в свою очередь также снижает стоимость разработки для клиента. При использовании Kotlin/Native, разработчику скорее всего даже не будет требоваться дополнительная работа для правки при отладке кода на одной из платформ, что заметно уменьшает трудозатратность подобной работы.
Что касается обучения, то на опыте нашей команды мы можем привести пример, когда iOS-разработчик, впервые столкнувшись с Kotlin, за неделю освоился в Multiplatform-проекте и сейчас успешно поддерживает и пишет новый общий код в common-библиотеке. К слову, использование Kotlin multiplatform будет быстрее даваться Android-разработчикам, но в целом сама технология не является слишком сложной для обучения на уже существующем проекте. А именно, если разработчик еще не знаком с Kotlin Multiplatform и Kotlin/Native, но должен поддерживать проект, созданный с ее помощью, то образовательные расходы на него не будут значительны.
И всё-таки почему Kotlin/Native?
Следует подытожить ключевые преимущества Kotlin/Native и Kotlin Multiplatform по сравнению с текущей разработкой, а именно:
— Для работы над проектом не требуется по отдельному выделенному специалисту на каждую платформу: один из специалистов может делать общий код и нативную сторону его платформы, позже на очень короткое время потребуется подключение специалиста с другой платформы, для реализации своей нативной стороны, не реализуя, однако, повторно всё то же, что делал первый специалист;
— Сам код пишется лишь единожды, затем компилируется под другую платформу, это избавляет разработку от получения разных реализаций под разные платформы и от появления разных багов между платформами: поведение их обеих будет унифицировано и изменяться будут обе вместе;
— Поддержка и развитие приложения становится экономичнее, эффективнее, реализация различных фич также проходит заметно быстрее (и даже вдвое быстрее) за счет использования одной и той же кодовой базы и усилий одного и того же разработчика.
На KotlinConf 2018 в начале октября было объявлено, что Kotlin/Native перешел в статус beta-тестирования, а компания JetBrains в данный момент делает акцент на реализации инструментария для разработки Kotlin Multiplatform iOS- и Android-проектов. Вместе с релизом Kotlin 1.3 ожидается и релиз Kotlin/Native 1.0. Команда IceRock Development уже успешно использует Kotlin Multiplatform проект под iOS и Android в разработке и намерена и далее активно развивать это направление.