Kotlin — OSS-статически типизированный язык программирования с поддержкой JVM, Android, JavaScript и Native. Язык разработан JetBrains. Проект начался в 2010 и с самого начала был открытым. Версия 1.0 была выпущена в феврале 2016 г.
Какова текущая версия Kotlin?
Последняя выпущенная версия — 1.7.20, опубликована 29 сентября 2022 г.
Свободен ли Kotlin?
Да. Kotlin был, есть и будет свободным. Он разрабатывается под лицензией Apache 2.0, а исходный код доступен на GitHub.
Является ли Kotlin объектно-ориентированным или функциональным?
Kotlin является и тем, и другим. Вы можете как угодно использовать и комбинировать эти стили. При полной поддержке таких возможностей, как функции высшего порядка, функциональные типы и лямбда-выражения, Kotlin — отличный выбор, если вы используете или изучаете функциональное программирование.
Какие преимущества есть у Kotlin по сравнению с Java?
Kotlin более лаконичен. Код на Kotlin примерно на 40% короче. Также Kotlin является типобезопасным. Благодаря null-безопасности приложения менее уязвимы к NullPointerException. В списке других возможностей: умное приведение типов, функции высшего порядка, функции-расширения и лямбда-выражения с получателями.
Kotlin: это что и зачем нужен
Они позволяют писать выразительный код и поддерживать создание 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 установка IDEA и первая программа))
Можно ли использовать 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, организуемые сообществом, новостную рассылку, подкаст и так далее.
Где можно найти HD-логотип Kotlin?
Источник: kotlinlang.ru
Kotlin: что это за язык, где и как используется
Педагог, копирайтер и тьютор. Люблю читать, писать, размышлять и помогать людям и профессиям находить друг друга. А еще писать просто о сложном, объяснять неочевидное, находить недоступное, анализировать то и это
В 2011 году программисты российского отделения международной компании JetBrains презентовали новый язык программирования Kotlin. Он стал ответом на запрос разработчиков создать язык более простой и удобный, чем Java. Своё название Kotlin получил по названию одноимённого острова в Финском заливе, как в своё время Java получил название в честь острова Ява.
С 2017 года Kotlin получил поддержку корпорации Google, и это возвело его в ранг популярных и востребованных языков. Если вы выбираете, какой язык программирования изучать, познакомьтесь ближе с языком Kotlin. Мы расскажем, в чём его особенности, где и как язык используется, его плюсы и минусы. Вы разберётесь, нужно ли изучать Kotlin и что это даёт программисту.
Содержание статьи скрыть
Особенности языка Kotlin
Kotlin — молодой объектно-ориентированный язык программирования, разработанный российской компанией JetBrains в 2011 г.
Главное, чем хорош Kotlin — функциональным программированием. То есть разработчик не задаёт последовательность команд, а описывает взаимодействие между командами и подпрограммами. Это значит, что программист задаёт правила, а код сам решает, как их использовать. Такой подход избавил Kotlin от основных недостатков С++ и Java — с ним работать проще, удобнее и быстрее.
Котлин отличается лаконичным, понятным и удобным синтаксисом — это одинаково ценят новички и опытные разработчики. Большое количество кода в Котлин программисты игнорируют — язык сам добавляет недостающие символы.
В Kotlin для разделения операторов не нужно ставить точку с запятой, а при объявлении переменных не нужно указывать их тип
Ежедневные советы от диджитал-наставника Checkroi прямо в твоем телеграме!
Подписывайся на канал
Подписаться
Преимущества и недостатки языка Kotlin
Чаще всего котлин применяют для android-разработки. Но он работает везде, где работает джава. И плюсы котлина родились из минусов джавы.
Преимущества программирования на Kotlin:
- Совместимость с Java. Kotlin используют в проектах, уже реализованных на джава. На нём создают программы с нуля до релиза как моно, так и совместно с джава.
- Чистота. В котлине нет лишних функций, избыточных модулей, он компактен и лаконичен. По сравнению с другими языками, код в котлин короче на 40 % — это снижает количество ошибок.
- Безопасность. На этапе компиляции предусмотрена автоматическая проверка кода. В котлин есть функция Null Safety, которая помогает избежать ошибок неопределённости в коде — самых распространённых и самых трудно выявляемых ошибок.
- Простота синтаксиса. Этот язык задумывался, в том числе, как лёгкий для изучения. Авторы уверяют, что перейти с любого другого языка на котлин можно за неделю. Новички осваивают котлин быстрее, чем другие языки.
Недостатки программирования на Kotlin:
- Низкая скорость компиляции. В среднем компиляция на котлин дольше, чем на джава на 30-40 %. Это связано с тем, что компиляция в виртуальной машине JVM предназначена для джава, поэтому с родным языком она работает быстрее.
- Мало дополнений. В силу молодости языка у него намного меньше библиотек и фреймворков, чем у джава. Но это вопрос времени, команда разработки котлин продолжает работать над продуктом и новые возможности языка не за горами.
- Малочисленное сообщество. Официальный релиз языка состоялся в 2017 году и пока разработчики при обнаружении багов вынуждены обращаться в техподдержку JetBrains, добавлять свою проблему в очередь и ждать её решения.
Тем не менее нерешаемые на котлин задачи, успешно реализуют на джава.
Для чего и где используется сейчас
Котлин задумывался как продолжение джава, при этом его используют самостоятельно и совместно с джава.
Сферы применения языка Kotlin:
- приложения для устройств с операционными системами Android;
- программы под iOS, Windows, Linux, Mac OS;
- серверные и клиентские веб-приложения, десктопное ПО;
- софта для анализа, обработки и представления данных — Data Science.
Котлин объединяет целое семейство инструментов — библиотеки, фреймворки, расширения и технологии. В ближайшем будущем вся эта экосистема будет объединена в единую систему Kotlin Multiplatform.
Kotlin Multiplatform станет системой мультиплатформенного программирования. Её задача — сократить время, затрачиваемое на написание и поддержку одного и того же кода для разных платформ. При этом она поможет сохранить гибкость и преимущества нативного программирования на языке котлин.
С чего начать изучение Kotlin: пошаговая инструкция
Перед тем как приступить к изучению языка, изучите его официальный сайт. Здесь вы найдёте техническую документацию, инструкции, библиотеки и ответы на часто задаваемые вопросы.
Немного о Kotlin
На днях JetBrains после пятилетней работы выпустила первый релиз языка Kotlin. Давайте посмотрим, что же это за язык, попробуем разобраться зачем и для кого он, какие имеет функциональные особенности. Скорее всего в статью затесались и личные впечатления от языка, но я старался, чтобы они не влияли на изложение полезной информации. Если вы еще ничего или почти ничего не знаете о Kotlin, то я завидую вам, ибо по моему ощущению почитать про инструмент, который ты долго ждал, сродни распаковке новогоднего подарка. Впрочем судите сами.
Что такое Котлин
Котлин — это небольшой остров в Финском заливе недалеко от Санкт-Петербурга. Видимо, тем самым создатели дают отсылку к тому, что новый язык, как остров Котлин — младший русский брат далекого острова Ява.
Для кого этот язык
Действительно, новый язык компилируется в JVM байт-код (есть еще и компиляция в JavaScript, но так как релиз компилятора именно в JVM, эту тему придется опять отложить). А это значит, что он может заинтересовать всех, кто имеет дело с Java-машиной и в целом с языками со сборщиком мусора (а с выходом релиза компиляции в JavaScript покрытие и возможности будут еще шире).
Простой и совместимый
Две главных особенности котлина, на мой взгляд, это его простота и полная совместимость с Java. Котлин создавался компанией, которая делает очень много продуктов на Java и которая хорошо разбирается в современных инструментах разработки. Запрос на новый язык витает в воздухе давно, но сделать такой язык, который бы позволил взять (огромную) готовую кодовую базу Java, обычных Java-разработчиков, дать им новый инструмент и бесшовно (но более эффективно) продолжать разработку — такого инструмента до появления котлина не существовало. Создатели нового языка, на мой взгляд, очень хорошо почувствовали потребности бизнеса и разработчиков: бизнесу дали возможность увеличить эффективность разработчиков, а разработчикам дать современный инструмент для разработки. И когда я говорю о «современном инструменте», я, конечно, имею ввиду не только компилятор, но и поддержку в IDE, без которой лично моя деятельность разработчика мне видится совсем немыслимой.
В итоге: простота позволяет использовать язык почти любому Java-разработчику, который готов потратить полчаса на то, чтобы посмотреть туториал или спецификацию языка, обратная совместимость же позволяет использовать язык в уже существующем проекте.
Production-ready
Конечно, в первую очередь, запрос на этот язык был у самой JetBrains, отсюда и некоторое понимание, каким он должен быть. Более того, JetBrains же внутри компании его и тестировала: к моменту выхода этого релиза у компании уже есть как минимум один крупный продукт сделанный чисто на котлине (да, я понимаю, что платформа по прежнему написана на Java). Отсюда можно предположить, что заявления о готовности языка к продакшену не голословны. А из своего же опыта использования котлина с 2012 года могу сказать, что из тех проблем, с которыми я сталкивался в дорелизные времена, до релиза ни одна не дожила. Есть еще небольшие проблемы с плагином для IDEA, но сам компилятор работает как часы.
Совместим с Java 1.6
Это очень важный момент, ведь именно эта версия Java используется во всех современных версиях Android, и, не смотря на запланированный переход на OpenJDK, восьмая версия попадет в руки разработчикам под мобильные устройства не так скоро как хотелось бы. Конечно, есть всякие ретролямбды и другие ухищрения, но котлин — это не только лямбды для андроид, но и современный язык, позволяющий сделать разработку под андроид проще и приятней без особых затрат. А увеличение размера apk совсем не значительно по нынешним временам: 823KB (для версии 1.0.0)
Особенности
Полный список возможностей, конечно, лучше искать в документации, я же постараюсь отразить наиболее важные на мой взгляд моменты в общих словах:
Null safety
/* вопросом помечаем, что может прийти null */ fun someFunction(someNullableParam:SomeType?) < if(someNullableParam != null) < // smart cast. Компилятор видит, что передаваемое // значение не null и разрешает его передать в функцию anotherFunction(someNullableParam) >> /* здесь же уже null не пройдет, в попытке передать * null или nullable значение компилятор выдаст ошибку */ fun anotherFunction(someParam:SomeType) < // делаем что-то без опаски, что переданное значение null >
Выведение типов
Да, котлин почти везде где возможно, умеет вывести тип, однако тип всё же придется определить для публичных методов и свойств, что очень разумно (мне подсказывают, что это неправда — с какой-то версии это убрали):
// Kotlin в курсе, что здесь List val result = sequenceOf(10).map < it.toString() >.flatMap < it.toCharArray().asSequence() >.toList()
Extension methods
Возможность, которой мне остро не хватает в Java для увеличения гибкости языка и решений. Заключается в возможности определить метод для типа отдельно от его (типа) объявления. Такая функция, конечно, не будет виртуальной и никак не меняет класса, которому мы добавляем метод, однако позволяет добавить как утилитарную функциональность для уже существующего кода, так и разгрузить интерфейс от этих же утилитарных методов.
interface Vector2 < val x:Float // это не поле, а ридонли свойство (property) val y:Float // в Java были бы методы getX() и getY() >/* Extension property. Без поля в классе, просто getLength() */ val Vector2.length:Float get() = (x * x + y * y).sqrt() // притворимся, что такая extension-функция для Float уже существует /* переопределяем оператор + */ operator fun Vector2.plus(other:Vector2):Vector2 = createVector(x+this.x, y+this.y) // какой-то способ создать новый вектор /* без тела, после знака = пишем одно выражение */ fun Vector2.dot(x: Float, y: Float): Float = x * this.x + y * this.y /* Помечая функцию с одним параметром как infix, * мы позволяем вызывать её через пробел: v1 dot v2 */ infix fun Vector2.dot(vec2: Vector2): Float = dot(vec2.x, vec2.y) fun usage(vec1:Vector2, vec2:Vector2) < val dotProduct = vec1 dot vec2 val sum = vec1 + vec2 // на выходе новый вектор val length = sum.length // обращаемся просто как к свойству >
Лямбды
Конечно, как любой современный язык с претензией на возможности функцинального программирования, у котлина функция — это сущность первого класса, если переводить дословно. Т.е. функции можно не только объявлять прямо в пакете (из джавы они видны всё равно в классах — по имени файла), но и передавать в качестве параметров, возвращать из других функций и тд. И сейчас, конечно, никого этим не удивишь, но например в сравнении с Java, где синтаксически функций как таковых нет (а только функциональные интерфейсы), в котлине полноценный синтаксис для объявления функции:
/* передаем в одну функцию другую — принимает в параметр Int * и Int же возвращает. Возвращаем её же, только с фиксированным * значением в качестве параметра */ fun passTen(func: (Int)->Int ): ()->Int < return < func(10) >>
Extension-лямбды
Наряду с extension-методами, это еще одна моя любимая фича. Позволяет определить лямбду, которая будет еще и extension-методом.
Звучит не очень, да. Посмотрим на примере:
class World(val name:String = «world») val printName:World.()->Unit = < // интерполяцией в синтаксисе языка сейчас уже // никого не привлечь на темную сторону println(«Hello $name») >val world = World() // вызываем нашу функцию как будто это метод нашего класса! world.printName()
Эта возможность особенно интересно смотрится в билдерах, посмотреть на которые я предлагаю вам самостоятельно — на случай, если вам интересно, как получаются вот такие конструкции:
html < head < title > body < h1 a(href = «http://kotlinlang.org») > >
Inline-фукнции
Помечая функцию как inline мы просим компилятор поместить её по месту использования. Чаще всего такими вещами занимается рантайм, но есть кейзы, когда мы точно знаем, что фукнция это просто шорткат для какого-то действия — особенно эффективно это работает с передаваемыми лямбдами:
/* передаваемой лямбдой block сейчас уже никого не удивишь. * Главно, что лишних затрат на вызов этой функции не будет вообще, * иногда мне кажется, что это что-то вроде макросов */ inline fun lock(lock:Lock, block:()->Unit) < lock.lock() try < block() >finally < lock.unlock() >> fun usage() < lock(Lock()) < // делаем что-то внутри блокировки >>
Конечно, на такие функции накладывается серия ограничений, подробнее см. документацию.
Делегирование
В котлине есть два типа делегирования. Первый, который позволяет делегировать все методы реализуемого интерфейса к какому-то инстансу этого типа:
interface Connection < fun connect() >/* здесь мы видим стандартный для котлина синтаксис определения * класса вместе с параметрами конструктора и свойствами — * в данном случае connection будет и в конструкторе и в поле. * Есть возможность определить и множественный конструктор * см https://kotlinlang.org/docs/reference/classes.html#constructors * И, наконец, мы видим что класс реализует интерфейс Connection, все методы * которого делегируются к переданному в конструктор экземпляру Connection-а. * При желании их конечно можно переопределить в теле класса */ class ConnectionWrapper(val connection:Connection) : Connection by connection
У этого синтаксиса есть ряд ограничений. Например, инстанс для делегирования должен быть известен до вызова конструктора.
Второй тип делегирования — это delegated properties. Позволяет определить объект с методами get (и set для var), к которым будет осуществляться делегирование доступа при обращении к свойству объекта.
class Foo < /* это делегат из стандартной библиотеки, позволяет отложить инициализацию поля до первого обращения к нему */ private val someProeprty by lazy < HavyType() >>
Generics
Создатели котлина несколько улучшили Java-дженерики. Из-за совместимости с джавой не всё получилось как хотелось бы, но им удалось исправить много неприятных моментов, которые не учли их предшественники при работе над Java 5.
Деструктуризация
val (first, second) = someFunc()
Чтобы такой код заработал, возвращаемое значение из someFunc() должно быть типа, у которого есть (можно extension) методы component1(), component2():
class Foo < fun component1():String = «test» fun component2():Int = 10 >fun someFunc():Foo = Foo() // или так, to — в это такой infix extension-метод определенный // для Any, который создает экземпляр класса Pair, метод hashMapOf // в свою очередь принимает vararg параметр таких пар val map = hashMapOf(1 to «test») for ((id, name) in map) < // такой синтаксис возможен, потому что для Map-а определен метод iterator() // возвращающий набор Map.Entry, а для него в свою очередь определены два // extension-метода component1() и component2() >
Data-классы
Сахар компилятора для создания бинов:
data class Bean(val a:String, val b:Int)
Создает бин с полями + автогенерирует equals+hashCode+toString()+componentN из раздела выше, что позволяет писать такой код:
fun someFunc():Bean = Bean(«test», 10) val (a, b) = someFunc()
Полезная вещь, но о нюансах см. пункт «О грустном».
Стандартная библиотека
Конечно, нельзя не упомянуть и стандартную библиотеку. Так как котлин нацелен в первую очередь на работу вместе с Java, то и целиком своей стандартной библиотеки у него нет. Большая часть стандартной библиотеки Kotlin нацелена на улучшение и исправление библиотеки старшего брата — Java. Однако, это тема для другой большой статьи.
О грустном
Вы могли подумать, что это идеальный продукт, но нет, есть и неприятные моменты:
IDE
Над плагином еще работать и работать, периодически выдает эксепшены, плохо умеет в toString() в дебаге, а так же любит промахиваться по ссылке на исходник, иногда (видимо из за особенностей инлайна) путает где поставлен брэкпоинт и тому подобные проблемы. Это всё конечно со временем наверняка поправят, но сейчас мы имеем именно это.
Data-классы
Надо признать, что идея была хорошая, но в данный момент есть масса ограничений , наложенных на этот тип классов, что позволяет их использовать в сильно более ограниченном числе кейзов, нежели хотелось бы. Создатели языка обещают поработать над решением этой проблемы, но пока так.
Некоторая неряшливость
Конечно, неряшливость в первую очередь в головах, но краткость синтаксиса иногда играет злую шутку, и местами код выглядит неважно. Возможно, наличие стайл-гайда несколько эту проблему исправило бы, но пока иногда приходится постараться, чтобы не только хорошо работало, но и красиво выглядело. Особенно на мой субъективный взгляд страшно выглядят get, set для свойств.
В заключение
Одной статьёй невозможно охватить все особенности и аспекты языка, но я и не пытался. Моей задачей было познакомить с языком, может быть обратить на него внимание. Тот, кто заинтересовался, сможет найти больше в документации, посмотреть исходники, попробовать, задать вопрос.
Сложно предсказать популярность этого языка, но уже сейчас видно, что такого продукта многие ждали, проекты на котлине появляются как грибы, а после релиза частота их появления увеличится еще. По моему впечатлению, языка хорошо сбалансирован и продуман — во время написания кода, складывается ощущение, что всё на своем месте. Если вы используете jvm или любой другой язык со сборкой мусора, есть смысл обратить внимание на котлин. Лично для меня, котлин — это тот инструмент, которого я долго ждал и теперь не представляю, как мог бы обходиться без него.
Источник: habr.com