клиент серверное приложение kotlin

Частые вопросы

Что такое Kotlin?

Какова текущая версия Kotlin?

Свободен ли Kotlin?

Да. Kotlin был, есть и будет свободным. Он разрабатывается под лицензией Apache 2.0, а исходный код доступен на GitHub.

Является ли 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?

Во что может компилироваться и транслироваться 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?

Где можно узнать больше про язык?

Лучше всего начать прямо на этом сайте или на 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 в социальных сетях?

Наиболее активный аккаунт на Twitter. Также есть группа Google+.

Есть ли ещё какие-либо онлайн-ресурсы по Kotlin?

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

Источник

Создаём своё первое приложение для Kotlin Multiplatform

Авторизуйтесь

Создаём своё первое приложение для Kotlin Multiplatform

клиент серверное приложение kotlin. foto 2 scaled e1591889496161. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-foto 2 scaled e1591889496161. картинка клиент серверное приложение kotlin. картинка foto 2 scaled e1591889496161.

ведущий мобильный разработчик компании Usetech

Основная идея KMP, как и других кросс-платформенных SDK — оптимизация разработки путем написания кода один раз и последующего его использования на разных платформах.

Согласно концепции JetBrains, Kotlin Multiplatform не является фреймворком. Это именно SDK, который позволяет создавать модули с общим кодом, подключаемые к нативным приложениям.

клиент серверное приложение kotlin. pic1. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic1. картинка клиент серверное приложение kotlin. картинка pic1.

Написанный на Kotlin модуль компилируется в JVM байткод для Android и LLVM байткод для iOS.

3–4 декабря, Онлайн, Беcплатно

Этот модуль (Shared, Common) содержит переиспользуемую бизнес-логику. Платформенные модули iOS/Android, к которым подключен Shared/Common, либо используют написанную логику напрямую, либо имплементируют свою реализацию в зависимости от особенностей платформы.

Общая бизнес-логика может включать в себя:

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

Концепцию Kotlin Multiplatform можно сравнить с реализацией Xamarin Native. Однако, в KMP нет модулей или функционала, реализующих UI. Эта логическая нагрузка ложится на подключенные нативные проекты.

Рассмотрим подход на практике и попробуем написать наше первое приложение Kotlin Multiplatform.

Для начала нам потребуется установить и настроить инструменты:

Мы рассмотрим создание проекта с помощью Intelij IDEA.

Выбираем меню File → New → Create Project:

клиент серверное приложение kotlin. pic2. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic2. картинка клиент серверное приложение kotlin. картинка pic2.

В появившемся окне выбираем тип проекта Kotlin → Mobile Android/iOS|Gradle

Далее стандартно задаем путь к JDK, имя и расположение проекта

клиент серверное приложение kotlin. pic3. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic3. картинка клиент серверное приложение kotlin. картинка pic3.

После нажатия кнопки Finish проект сгенерируется и будет почти готов к работе.

Рассмотрим, что у нас получилось:

клиент серверное приложение kotlin. pic4. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic4. картинка клиент серверное приложение kotlin. картинка pic4.

Мультиплатформенные проекты Kotlin обычно делятся на несколько модулей:

В них располагается наша бизнес-логика. Сам код базового примера мы разберем немного позже.

клиент серверное приложение kotlin. pic5. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic5. картинка клиент серверное приложение kotlin. картинка pic5.

Код нативного Android приложения располагается в каталоге main, как если бы мы создавали проект по шаблону обычного Android.

iOS приложение создается автоматически и располагается в каталоге iOSApp:

клиент серверное приложение kotlin. pic6. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic6. картинка клиент серверное приложение kotlin. картинка pic6.

Перед тем, как мы проверим работоспособность базового решения, необходимо сделать следующие финальные настройки:

В local.properties зададим путь к SDK Android:

клиент серверное приложение kotlin. pic7. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic7. картинка клиент серверное приложение kotlin. картинка pic7.

Создадим конфигурацию для работы Android приложения:

клиент серверное приложение kotlin. pic8. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic8. картинка клиент серверное приложение kotlin. картинка pic8.

Теперь вызовем команду gradle wrapper для сборки нашего модуля общей логики:

клиент серверное приложение kotlin. pic9 1. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic9 1. картинка клиент серверное приложение kotlin. картинка pic9 1.

После сборки модуль для бизнес-логики для Android приложения доступен в app/build/libs:

клиент серверное приложение kotlin. pic10. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic10. картинка клиент серверное приложение kotlin. картинка pic10.

Путь к библиотеке прописывается стандартно, в блоке dependencies файла build.gradle:

клиент серверное приложение kotlin. pic11. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic11. картинка клиент серверное приложение kotlin. картинка pic11.

Теперь наш проект сконфигурирован для запуска Android приложения:
клиент серверное приложение kotlin. pic12. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic12. картинка клиент серверное приложение kotlin. картинка pic12.

Осталось сделать настройки для запуска приложения iOS.

В файле build.gradle(:app) необходимо изменить настройку архитектура проекта, чтобы наше приложение поддерживало как реальные устройства, так и эмуляторы.

клиент серверное приложение kotlin. pic13. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic13. картинка клиент серверное приложение kotlin. картинка pic13.

клиент серверное приложение kotlin. pic14. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic14. картинка клиент серверное приложение kotlin. картинка pic14.

После выполнения сборки создастся фреймворк в app/build/bin/ios:

клиент серверное приложение kotlin. pic15. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic15. картинка клиент серверное приложение kotlin. картинка pic15.

Intelij IDEA автоматически создает в gradle файле код для генерации, подключения и встраивания фреймворка в IOS проект:

клиент серверное приложение kotlin. pic16. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic16. картинка клиент серверное приложение kotlin. картинка pic16.

При ручной настройке проекта (например, через Android Studio) этот код потребуется указать самостоятельно.

После синхронизации gradle iOS проект готов к запуску и проверке с помощью XCode.

Проверяем, что у нас получилось. Открываем проект iOS через iosApp.xcodeproj:

клиент серверное приложение kotlin. pic17 autoconverted. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic17 autoconverted. картинка клиент серверное приложение kotlin. картинка pic17 autoconverted.

Проект имеет стандартную структуру, за исключением раздела app, где мы получаем доступ к коду наших модулей на Kotlin.

Фреймворк действительно подключен автоматически во всех соответствующих разделах проекта:

клиент серверное приложение kotlin. pic18. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic18. картинка клиент серверное приложение kotlin. картинка pic18.

Запускаем проект на эмуляторе:

клиент серверное приложение kotlin. pic20. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic20. картинка клиент серверное приложение kotlin. картинка pic20.

Теперь разберем код самого приложения на базовом примере.

Используемую в проекте бизнес-логику можно разделить на:

клиент серверное приложение kotlin. pic21. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic21. картинка клиент серверное приложение kotlin. картинка pic21.

Переиспользуемая логика располагается в проекте commonMain в каталоге kotlin и разделяется на package. Декларации функций, классов и объектов, обязательных к переопределению, помечаются модификатором expect :

клиент серверное приложение kotlin. pic22. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic22. картинка клиент серверное приложение kotlin. картинка pic22.

клиент серверное приложение kotlin. pic23. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic23. картинка клиент серверное приложение kotlin. картинка pic23.

Вызов логики производится в нативном проекте:

клиент серверное приложение kotlin. pic24. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic24. картинка клиент серверное приложение kotlin. картинка pic24.

Теперь попробуем по тем же принципам сделать что-то посложнее и поинтереснее. Например, небольшое приложение для получения и отображение списка новостей для iOS и Android.

Приложение будет иметь следующую структуру:

клиент серверное приложение kotlin. pic25. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic25. картинка клиент серверное приложение kotlin. картинка pic25.

В общей части (Common) расположим бизнес-логику:

В модулях iOS/Android приложений оставим только UI компоненты для отображения списка и адаптеры. iOS часть будет написана на Swift, Android – на Kotlin. Здесь в плане работы не будет ничего нового.

Организуем архитектуру приложений по простому паттерну MVP. Презентер, обращающийся к бизнес-логике, также вынесем в Common часть. Также поступим и с протоколом для связи между презентером и экранами UI:

Начнем с бизнес-логики. Т.к весь функционал будет в модуле common, то мы будем использовать в качестве библиотек решения для Kotlin Multiplatform:

1. Ktor – библиотека для работы с сетью и сериализации.

В build.gradle (:app) пропишем следующие зависимости:

Также добавим поддержку плагина сериализации:

2. Kotlin Coroutines – для организации многопоточной работы.

При добавлении зависимости в iOS проект обратите внимание, что версия библиотеки должна быть обязательно native-mt и совместима с версией плагина Kotlin multiplatform.

В commonMain создадим Dispatchers.kt, где объявим переменные:

Реализация в androidMain создается легко. Для доступа к соответствующим потокам используем CoroutineDispatchers Main (UI поток) и Default (стандартный для Coroutine ):

С iOS труднее. Та версия Kotlin Native LLVM компилятора, которая используется в Kotlin Multiplatform, не поддерживает background очереди. Это давно известная проблема, которая к сожалению, еще не исправлена

Поэтому попробуем обходной маневр как временное решение проблемы.

Также нам понадобится свой scope для работы сетевого клиента:

Android

Применим это при реализации сетевого клиента на Ktor:

Вызывать бизнес-логику будем в презентере. Для полноценной работы с coroutines нам надо будет создать scope:

и добавить его в презентер. Вынесем в базовый класс:

Теперь создадим презентер NewsListPresenter для нашего модуля. В инициализатор передадим defaultDispatcher :

Обратите внимание! Из-за особенностей текущей работы Kotlin Native с многопоточностью в IOS работа с синглтонами может привести к крашу. Поэтому для корректной работы надо добавить аннотацию @ThreadLocal для используемого объекта:

Осталось подключить логику к нативным IOS и Android модулям и обработать ответ от Presenter:

Запускаем сборку common модуля gradle wrapper, чтобы сборки обновились. Проверяем работу приложений:

клиент серверное приложение kotlin. pic26 autoconverted. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic26 autoconverted. картинка клиент серверное приложение kotlin. картинка pic26 autoconverted.

клиент серверное приложение kotlin. pic27 autoconverted. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-pic27 autoconverted. картинка клиент серверное приложение kotlin. картинка pic27 autoconverted.

Готово. Вы великолепны.

Оба наши приложения работают и работают одинаково.

Информационные материалы, которые использовались:

Источник

Эффективная разработка серверных приложений на Kotlin: истории разработчиков

Read this post in other languages:
English, Français, 日本語, 한국어

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

Мы хотели бы узнать, как вы разрабатываете серверные приложения на Kotlin, и рассказать о вашем опыте другим.

клиент серверное приложение kotlin. Screenshot 2020 11 09 at 18.13.01. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-Screenshot 2020 11 09 at 18.13.01. картинка клиент серверное приложение kotlin. картинка Screenshot 2020 11 09 at 18.13.01.

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

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

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

Эта статья основана на материалах с онлайн-конференции Kotlin 1.4. Видео можно посмотреть на нашем YouTube-канале.

Почему Kotlin?

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

Пользователи, с которыми мы пообщались, больше всего оценили следующие особенности Kotlin:

Давайте посмотрим на примеры эффективного программирования на Kotlin.

JetBrains Space: масштабное переиспользование кода

Разумеется, в JetBrains мы много пишем на Kotlin, разрабатывая с его помощью не только инструменты, но и сервисы. JetBrains Space, платформа для командной работы, которую мы представили на KotlinConf 2019, построена на Kotlin и фреймворке Ktor. В Space все написано на Kotlin: серверные сервисы на JVM, Android и iOS-приложения, веб-приложение и плагин для IDE.

Благодаря Kotlin Multiplatform все эти приложения используют большой объем общего кода. Помимо общей модели данных в интерфейсе и на стороне сервера, в Space также используется общая модель представления, логика валидации и общие библиотеки. Однако UI-компоненты для каждой платформы свои, поэтому совместимость играет важную роль.

Kotlin Multiplatform

Чтобы у вас было представление о кросс-платформенной разработке на Kotlin, рассмотрим такой пример. Допустим, есть класс данных, который мы хотим использовать для нескольких платформ (JVM, JavaScript, iOS):

Класс String принадлежит стандартной библиотеке Kotlin, а LocalDate — нет. Мы можем указать, какой класс следует использовать в качестве LocalDate для каждой платформы. Для этого в общем модуле, который используется на разных платформах, мы объявляем класс LocalDate с помощью ключевого слова expect, предполагая, что разные модули обеспечат реальную реализацию. Ключевое слово actual указывает, какой тип следует использовать в платформенном коде:

Платформенно-независимый код можно написать только один раз в общем модуле проекта. Такой код затем будет использоваться разными модулями, предназначенными для конкретных платформ.

Кросс-платформенные возможности Kotlin особенно популярны среди мобильных разработчиков, которые используют общий код в Android и iOS-приложениях. На сайте Kotlin Multiplatform Mobile можно подробнее узнать о технологии и о том, как ею пользуются в разных компаниях.

Jira Software: микросервисы с Kotlin и Spring Boot

Еще один интересный пример — Jira. Atlassian использует Kotlin для разработки облачных продуктов Jira Software.

Раньше Jira была автономным монолитным Java-приложением, которое пользователи устанавливали на свои серверы. Однако с появлением облачной версии возникла необходимость разделить приложение на несколько сервисов для лучшего масшибирования.

Переезд в облако был поводом обновить стек технологий, и тут не обошлось без Kotlin. Разработчики с удовольствием перешли на новый язык и оценили повышение производительности. Теперь они используют Kotlin и Spring Boot для реализации микросервисов, которые улучшают работу важных UX-аспектов. Kotlin и Spring используются во всем семействе облачных продуктов Jira — в Jira Software, Jira Service Desk и Jira Core.

Adobe: неблокирующее программирование с корутинами Kotlin для высоконагруженных сервисов

Команда Adobe Experience Platform рассказала, почему они предпочитают Kotlin для серверной разработки.

По их словам, бекенд превратился из монолитных веб-контейнеров в распределенную сеть приложений, управляемых данными. Эти приложения должны обрабатывать большой объем данных, принимать и отправлять сообщения, и все с максимально низкой задержкой.

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

«На Kotlin мы можем писать код в „прямом стиле“, который выглядит почти как блокирующий императивный код».

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

Другие важные особенности Kotlin: классы данных, крепкая система типов, null-безопасность и поддержка функционального программирования. Гибкий синтаксис Kotlin позволяет с легкостью создавать собственные предметно-ориентированные языки. Этот аспект тоже оказался довольно полезен для инженеров Adobe. Почитайте, что они рассказывают о своем опыте.

Expedia Group: построение API GraphQL с помощью Kotlin

Expedia начала использовать Kotlin из-за гарантий null-безопасности, лаконичности языка и его полной совместимости с Java. Эта совместимость позволила постепенно интегрировать Kotlin в проекты без необходимости полностью переписывать приложения. Кроме того, Expedia удалось легко интегрировать Kotlin-приложения с Java-библиотеками и пользоваться существующей экосистемой JVM.

Корутины стали одной из главных причин популярности Kotlin. Они позволяют разработчикам писать полностью асинхронный код императивным способом — такой код легче читать и поддерживать. Разработчики Expedia активно пользуются Spring Framework, и, начиная с версии 5.2, в нем поддерживается совместимость между WebFlux и корутинами. Для инженеров Expedia это стало важным изменением, позволившим более эффективно использовать стек Spring и Reactive.

Недавно Expedia решила перейти на GraphQL и создать единый API-шлюз для работы всех клиентских приложений. Для этого они использовали библиотеку Kotlin для работы с рефлексией, чтобы создавать схемы GraphQL прямо из исходного кода. Полученный набор библиотек graphql-kotlin с открытым исходным кодом оказался весьма полезным. Теперь он размещен на GitHub.

На KotlinConf 2019 Дариуш Кук и Гийом Шайбель рассказали, как использовать возможности Spring Boot вместе с graphql-kotlin. Вот видео этого доклада:

Мы поделились примерами использования Kotlin для серверной разработки. В JetBrains, Adobe, Expedia и Atlassian на Kotlin написаны важные приложения, которые очень чувствительны к показателям производительности. Это говорит о том, что Kotlin — зрелый язык программирования, подходящий для разработки веб-приложений и сервисов.

Ваша команда Kotlin
The Drive to Develop

Источник

Пишем простой RESTful сервис на kotlin и spring boot

клиент серверное приложение kotlin. image loader. клиент серверное приложение kotlin фото. клиент серверное приложение kotlin-image loader. картинка клиент серверное приложение kotlin. картинка image loader.

Введение

В преддверии выхода языка Kotlin из beta, хочется поделиться своим впечатлением от его использования.

Kotlin — это новый прекрасный язык от JetBrains (разработчиков IntelliJ Idea) для JVM, Android и браузера, который на первый взгляд выглядит как улучшенная java (или как упрощенная scala). Но это только на первый взгляд, язык не только впитал в себя многие интересные решения от других языков, но и представляет свои оригинальные:

— optional от swift, nullsafe в kotlin
— case классы из scala, data class в kotlin
— замена implicit методам из scala, extension функций
— делегаты
— null safely
— smart cast
— и многое другое, подробнее можно посмотреть на официальном сайте kotlinlang.

Для тех кто знаком с java или scala, будет интересно сравнение kotlin & java, kotlin & scala.

Авторы языка стремятся добиться двух задач:
— сделать скорость компиляции сравнимой с java
— язык должен быть достаточно выразительным, и при этом быть простым насколько возможно
Поэтому, стоит оговориться, что если вы на текущей момент счастливы со scala, с ее «сложностью» и временем компиляции, тогда вам скорее всего не нужен будет kotlin, для всех остальных читать дальше:

Для тех кто в танке впервые слышит о языке, ниже несколько примеров с официального сайта:

Из личного опыта применения kotlin особо хочется отметить несколько преимуществ языка:

— первое это конечно простоту взаимодействия с java. Все типы и коллекции из java преобразовываются в аналогичные из kotlin, и наоборот. Это особенно радует после всей той «анархии», которая творится в scala (да есть scala.collection.JavaConversions._ и scala.collection.JavaConverters._, но все же это не сравниться с полностью прозрачной конвертацией типов);
— также не может не радовать отличная поддержка от студии Intellij Idea, хоть язык и находится в Beta 4, уже на текущий момент плагин для студии позволяет комфортно работать;
— а для любителей implicit методов из scala, kotlin преподносит очень удобное решение в виде extension функций;
— помимо всего прочего разработчики языка ставят своей целью добиться времени компиляции сравнимой с java (привет scala), за что им только хочется пожать руки! Это особенно сильно радует после долгой работы в scala, когда редактирование одной строчки в достаточно небольшом файле компилируется с той же скоростью что и небольшой проект на java;
— inline функции — отличное нововведение. С их помощью можно, например, расширить текущие возможности языка, или в некоторых ситуациях добиться повышения производительности;
— удобные функции стандартной библиотеки.
— удобные лямбды, в отличие от той же java 8. Очень похожи на реализацию из scala.

Тем не менее у языка есть и свои недостатки:

— не хватает pattern matching из scala, но в некоторых ситуациях спасает smart cast и Destructuring Declarations, в других же приходится выкручиваться другими средствами. Отсутствие pattern matching в целом понятно, разработчики стараются добиться максимального приближения к времени компиляции java, но его наличие позволило бы существенно упростить написание некоторых приложений, так что довольствуемся тем что есть;
— try with resource пока реализован не очень удачно. Но тут авторы языка обещают в ближайшее время исправить ситуацию. А пока можно либо применять имеющееся решение, либо воспользоваться расширением языка:

— пока нет async и yield, но по словам авторов, после релиза 1.0 можно ждать их появление в самом ближайшем будущем.

Update В комментариях наибольший интерес вызывает сравнение со scala, и в частности преимущество kotlin:

1. Использование лямбд вместо анонимных классов (в scala правда тоже скоро это может появиться, но пока такой возможности нет).
Код в java:

В scala же уже не получится такое провернуть. А вот с kotlin проблем нет:

2. Есть тот же try-with-resources (да, можно сделать extension к языку, но из коробки этого нет, а значит придется тянуть решение из одного проекта в другой)
Это по крайней мере что первое приходит в голову

— отсутствие implicit. Сами по себе implicit конечно мощное решение, но без студии разобраться в чужом коде что к чем, почти нереально. Особенно если авторы «сильно увлеклись». А для добавления методов kotlin позволяет писать extension, которые на практике выглядят гораздо удобнее аналогичных решений в scala. Пример:
Scala:

— nullable типы вместо Option.

— удобные функции стандартной библиотеки

— ну и конечно же скорость компиляции. На практике действительно все очень быстро компилируется, особенно по сравнению со scala.

— результирующий jar меньше аналогичного в scala.

— и что немаловажно, JetBrains обещают полную обратную совместимость (привет еще раз scala c либами под 2.10, 2.11, 2.12 и т.д.)

Перейдем к примеру, в котором будет продемонстрировано небольшое RESTful приложение на spring boot, со сборкой через gradle.

Настройка студии

Настройка проекта

Создаем файл application.properties в папке src/main/resources, в котором укажем порт для запуска spring boot:

Создаем файл Application.kt в папке src/main/kotlin/test.kotlin.spring.project. В нем будут основные настройки для запуска spring boot:

Также необходимо будет создать файл с настройками методов rest сервиса. Будет несколько методов:

— метод будет выдавать AckResponse на введенные с запроса данные об имени и фамилии.
— метод, на вход поступает массив строк, из которого выбирается наименьшая строка по длине, которая потом разбивается по ‘_’, сортируется и собирается в строку уже с символом ‘,’ (демонстрирует возможности языка)

Создаем файл ServiceController.kt в папке src/main/kotlin/test.kotlin.spring.project.

Запуск и проверка работы

Запускаем приложение из Application.kt. В случае успешного запуска в логе будет что-то вроде:

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

И Запрос с именем и фамилией, тогда ответ будет немного другой:

Вызов для проверки сортировки данных: Сортировка. В результате должно быть:

Тот же вызов, но с пустым массивом: Вызов

При необходимости можно собрать весь проект в один runnable jar, командой: gradle build. В результате проект будет собран в один архив, содержащий все зависимости без распаковки. При таком подходе существенно повышается время сборки проекта, по сравнению с тем же assemble, когда проект собирается в один архив с распаковкой всех зависимостей.

Заключение

В заключении хочется отметить что kotlin оказался весьма удобным языком для работы над любым проектом, где используется java, в качестве ее замены. Экосистема языка пока не такая обширная как та же scala, но уже сейчас можно использовать его в том же big data, где есть java api. К тому же из kotlin очень просто взаимодействовать с java, так что все что есть в java, можно использовать и в kotlin. К тому же из студии есть возможность легкой конвертации java файлов в аналогичные на kotlin (правда нужно будет немного руками подправить файл после конвертации). JetBrains проделали замечательную работу на пути создания идеального языка на смену java и scala. И надеюсь в будущем тенденция в сторону использования kotlin будет только расти.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *