Котлин (язык программирования) - Kotlin (programming language)

Котлин
Kotlin-logo.svg
ПарадигмаМультипарадигма: объектно-ориентированный, функциональный, императив, блочная структура, декларативный, общий, отражающий, одновременный
РазработаноJetBrains
РазработчикJetBrains
Впервые появился22 июля 2011 г.; 9 лет назад (2011-07-22)
Стабильный выпуск
1.4.20 / 19 ноября 2020; 11 дней назад (2020-11-19)[1]
Печатная дисциплинаПредполагаемый, статический, сильный
Платформа
Операционные системыКроссплатформенность
ЛицензияЛицензия Apache 2.0
Расширения имени файла.kt, .kts, .ktm
Интернет сайтКотлинланг.org Отредактируйте это в Викиданных
Под влиянием

Котлин (/ˈkɒтлɪп/)[2] это кросс-платформенный, статически типизированный, общее назначение язык программирования с вывод типа. Kotlin полностью совместим с Ява, а JVM версия Котлина стандартная библиотека зависит от Библиотека классов Java,[3] но вывод типа позволяет синтаксис чтобы быть более лаконичным. Kotlin в основном нацелен на JVM, но также компилируется в JavaScript (например, для интерфейсных веб-приложений, использующих Реагировать[4]) или собственный код (через LLVM ), например для родных iOS совместное использование приложений бизнес-логика с Android Программы.[5] Затраты на развитие языка покрываются JetBrains, а Kotlin Foundation защищает товарный знак Kotlin.[6]

7 мая 2019 года Google объявил, что язык программирования Kotlin теперь является предпочтительным языком для Android разработчики приложений.[7] С момента выпуска Android Studio 3.0 в октябре 2017 года, Kotlin был включен в качестве альтернативы стандартному компилятору Java. Компилятор Android Kotlin по умолчанию нацелен на Java 6, но позволяет программисту выбрать целевую версию для Java 8–13 для оптимизации,[8] или другие функции.[9]

История

В июле 2011 г. JetBrains представила Project Kotlin, новый язык для JVM, который разрабатывался в течение года.[10] Руководитель JetBrains Дмитрий Емеров сказал, что у большинства языков нет тех функций, которые они искали, за исключением Scala. Однако он сослался на медленное сборник время Scala как недостаток.[10] Одна из заявленных целей Kotlin - компилировать так же быстро, как Java. В феврале 2012 года JetBrains открыла исходный код проекта под Лицензия Apache 2.[11]

Название происходит от Котлин остров, возле Санкт-Петербург. Андрей Бреслав упомянул, что команда решила назвать его в честь острова, так же как Ява была названа в честь индонезийского острова Ява[12] (хотя язык программирования Java, возможно, был назван в честь кофе).[13]

JetBrains надеется, что новый язык продвинет IntelliJ IDEA продажи.[14]

Kotlin v1.0 был выпущен 15 февраля 2016 года.[15] Это считается первым официально стабильным выпуском, и JetBrains взяла на себя обязательство обеспечивать долгосрочную обратную совместимость, начиная с этой версии.

В Google I / O 2017, Google объявил о первоклассной поддержке Kotlin на Android.[16]

Kotlin v1.2 был выпущен 28 ноября 2017 года.[17] В этот выпуск была недавно добавлена ​​функция совместного использования кода между платформами JVM и JavaScript (с версии 1.4 многоплатформенное программирование является альфа особенность[18] модернизированный с "подопытного"). А полный стек демо было сделано с новым плагином Kotlin / JS Gradle.[19][20]

Kotlin v1.3 был выпущен 29 октября 2018 года, предлагая сопрограммы для асинхронного программирования.

7 мая 2019 года Google объявил, что язык программирования Kotlin теперь является предпочтительным языком для разработчиков приложений Android.[7]

Kotlin v1.4 был выпущен в августе 2020 года, например, небольшие изменения в поддержке платформ Apple, т.е. Цель-C /Быстрый взаимодействие.[21]

Дизайн

Руководитель разработки Андрей Бреслав сказал, что Котлин задуман как промышленный объект. объектно-ориентированный язык, и "лучший язык", чем Ява, но при этом полностью совместимы с кодом Java, что позволяет компаниям постепенно переходить с Java на Kotlin.[22]

Точка с запятой являются необязательными как утверждение терминатор; в большинстве случаев новая линия достаточно для компилятор сделать вывод, что заявление закончилось.[23]

Котлин переменная декларации и списки параметров иметь тип данных идут после имени переменной (и с двоеточие разделитель), аналогично БАЗОВЫЙ, Паскаль и Машинопись.

Переменные в Kotlin доступны только для чтения, они объявляются с вал ключевое слово или изменяемое, объявленное с вар ключевое слово.[24]

Члены класса по умолчанию являются общедоступными, а сами классы по умолчанию являются окончательными, что означает, что создание производного класса отключено, если базовый класс не объявлен с открыто ключевое слово.

В добавок к классы и функции-члены (эквивалент методов) объектно-ориентированного программирования, Kotlin также поддерживает процедурное программирование с использованием функции.[25]Поддержка функций (и конструкторов) Kotlin аргументы по умолчанию, аргумент переменной длины списки, именованные аргументы и перегрузка по уникальной сигнатуре. Функции-члены класса являются виртуальными, т.е. отправляются в зависимости от типа среды выполнения объекта, для которого они вызываются.

Kotlin 1.3 добавляет (экспериментальную) поддержку контрактов[26] (вдохновленный Эйфеля дизайн по контракту[27] парадигма программирования)

Синтаксис

Процедурный стиль программирования

Kotlin ослабляет ограничение Java на разрешение статический методы и переменные должны существовать только в теле класса. Статические объекты и функции могут быть определены на верхнем уровне пакета без необходимости в избыточном уровне класса. Для совместимости с Java Kotlin предоставляет JvmName аннотация, определяющая имя класса, используемое при просмотре пакета из проекта Java. Например, @ файл: JvmName ("JavaClassName").

Основная точка входа

Как и в C, C ++, C #, Java и Go, точка входа в Котлин программа - функция с именем "main", которой можно передать массив, содержащий любые командная строка аргументы. (Это необязательно, так как Kotlin 1.3[28]). Perl и Оболочка Unix стиль строковая интерполяция поддерживается. Вывод типа также поддерживается.

 1 // Привет, мир! пример 2 весело основной() { 3     вал объем = "Мир" 4     println("Привет, $ scope!") 5 } 6  7 весело основной(аргументы: Множество<Строка>) { 8     за (аргумент в аргументы) { 9         println(аргумент)10     }11 }

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

Подобно C #, Kotlin позволяет пользователю добавлять функции в любой класс без формальностей, связанных с созданием производного класса с новыми функциями. Вместо этого Котлин добавляет концепцию функция расширения что позволяет «приклеить» функцию к списку общедоступных функций любого класса без формального размещения внутри класса. Другими словами, функция расширения - это вспомогательная функция, которая имеет доступ ко всему общедоступному интерфейсу класса, который она может использовать для создания нового интерфейса функции к целевому классу, и эта функция будет выглядеть точно так же, как функция класса, появляясь как часть проверки завершения кода функций класса. Например:

1 пакет MyStringExtensions2 3 весело Строка.lastChar(): Char = получать(длина - 1)4 5 >>> println(«Котлин».lastChar())

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

1 // Перегрузка оператора '+' с помощью функции расширения2 оператор весело Точка.плюс(Другой: Точка): Точка {3     вернуть Точка(Икс + Другой.Икс, у + Другой.у)4 }5 6 >>> вал p1 = Точка(10, 20)7 >>> вал p2 = Точка(30, 40)8 >>> println(p1 + p2)9 Точка(Икс=40, у=60)

Распаковать аргументы с помощью оператора распространения

Подобно Python, оператор распространения звездочка (*) распаковывает содержимое массива как аргументы функции, разделенные запятыми:

1 весело основной(аргументы: Множество<Строка>) { 2     вал список = Список("аргументы:", *аргументы)3     println(список)4 }

Деструктурирующие объявления

Деструктурирующие объявления разложить объект сразу на несколько переменных, например объект 2D координат может быть деструктурированный на два целых числа x и y.

Например, Map.Entry объект поддерживает деструктуризацию для упрощения доступа к его полям ключа и значения:

1 за ((ключ, ценить) в карта) {2     println("$ ключ: $ значение")3 }

Вложенные функции

Kotlin позволяет объявлять локальные функции внутри других функций или методов.

 1 класс Пользователь(вал я бы: Int, вал имя: Строка, вал адрес: Строка) 2      3 весело saveUserToDb(пользователь: Пользователь) { 4     весело подтверждать(пользователь: Пользователь, ценить: Строка, fieldName: Строка) { 5         требовать(ценить.isNotEmpty()) { «Не удается сохранить пользователя $ {user.id}: пустое поле $ fieldName» } 6     } 7      8     подтверждать(пользователь, пользователь.имя, "Имя")  9     подтверждать(пользователь, пользователь.адрес, "Адрес")10     // Сохраняем пользователя в базу данных 11     ...12 }

По умолчанию занятия финальные

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

Пример базового класса, который открыт для создания от него нового подкласса.

 1 // открыть в классе означает, что этот класс разрешит производные классы 2 открыто класс MegaButton  { 3  4     // запрет на открытие функции означает, что  5     // полиморфное поведение отключено, если функция переопределена в производном классе 6     весело отключить() { ... } 7  8     // открытие функции означает, что 9     // полиморфное поведение разрешено, если функция переопределена в производном классе10     открыто весело оживлять() { ... }11 }12 13 класс GigaButton: MegaButton {14 15     // Явное использование ключевого слова override, необходимого для переопределения функции в производном классе16     отменять весело оживлять() { println("Giga Click!") } 17 }

Абстрактные классы открыты по умолчанию

Абстрактные классы определить абстрактные или «чисто виртуальные» функции-заполнители, которые будут определены в производном классе. Абстрактные классы открыты по умолчанию.

 1 // Здесь ключевое слово open не нужно, оно уже открыто по умолчанию 2 Абстрактные класс Анимированные { 3  4     // Эта виртуальная функция уже открыта по умолчанию 5     Абстрактные весело оживлять() 6    7     открыто весело stopAnimating() { } 8  9     весело animateTwice() { }10 }

Классы по умолчанию общедоступны

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

   общедоступный, внутренний, защищенный и частный.

Применительно к члену класса:

   public (по умолчанию): Виден везде internal: Виден в защищенном модуле: Виден в подклассах private: Виден в классе

Применительно к объявлению верхнего уровня

   общедоступный (по умолчанию): виден везде internal: виден в модуле private: виден в файле

Пример:

1 // Класс виден только текущему модулю2 внутренний открыто класс TalkativeButton : Фокусируемый {3     // метод виден только текущему классу 4     частный   весело кричать() = println("Привет!")5 6     // метод виден текущему классу и производным классам7     защищенный весело шепот() = println("Давай поговорим!")8 }

Основной конструктор против вторичных конструкторов

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

1 // Пример класса с использованием синтаксиса основного конструктора2 // (Для этого класса требуется только один конструктор)3 открыто класс Продвинутый пользователь : Пользователь (4     защищенный вал прозвище: Строка, 5     окончательный отменять вар isSubscribed: Булево = истинный) 6     {7          ...8     }

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

 1 // Пример класса с использованием синтаксиса вторичного конструктора 2 // (для этого класса требуется более одного конструктора) 3 класс MyButton : Посмотреть { 4  5     // Конструктор №1  6     конструктор(ctx: Контекст) : супер(ctx) {  7         // ...  8     }  9   10     // Конструктор №211     конструктор(ctx: Контекст, attr: AttributeSet) : супер(ctx, attr) { 12         // ... 13     }14 }

Класс данных

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

1 весело основной(аргументы: Множество) {2     // создаем объект класса данных как любой другой объект класса3     вар book1 = Книга(«Программирование на Котлине», 250)4     println(book1)5     // вывод: Book (name = Kotlin Programming, цена = 250)6 }7      8 // класс данных с параметрами и их необязательными значениями по умолчанию9 данные класс Книга(вал имя: Строка = "", вал цена: Int = 0)

Интерактивная оболочка Kotlin

$ kotlinc-jvmтип :помощь за Помогите; :покидать за выйти >>> 2 + 24>>> println("Привет, мир!")Привет, мир! >>>

Котлин как язык сценариев

Kotlin также можно использовать как язык сценариев. Скрипт - это исходный файл Kotlin (.kts) с исполняемым кодом верхнего уровня.

1 // list_folders.kts2 импорт java.io.File3 вал папки = файл(аргументы[0]).listFiles { файл -> файл.isDirectory() }4 папки?.для каждого { папка -> println(папка) }

Скрипты можно запустить, передав -скрипт параметр и соответствующий файл сценария компилятору.

$ kotlinc -script list_folders.kts "path_to_folder_to_inspect"

Нулевая безопасность

Kotlin различает типы данных, допускающие значение NULL, и типы данных, не допускающие значения NULL. Все объекты, допускающие значение NULL, должны быть объявлены с помощью знака "?" постфикс после имени типа. Операции с объектами, допускающими значение NULL, требуют особой осторожности со стороны разработчиков: перед использованием значения необходимо выполнить проверку NULL. Kotlin предоставляет нулевые безопасные операторы, чтобы помочь разработчикам:

1 весело скажи привет(может быть: Строка?, neverNull: Int) {2     // использование оператора elvis3     вал имя: Строка = может быть ?: "чужой человек"4     println("Привет, $ name")5 }

Пример использования оператора безопасной навигации:

1 // возвращает null, если ...2 // - foo () возвращает null,3 // - или если foo () не равно null, но bar () возвращает null,4 // - или если foo () и bar () не равны нулю, но baz () возвращает null.5 // наоборот, возвращаемое значение не равно NULL тогда и только тогда, когда foo (), bar () и baz () не равны NULL6 фу()?.бар()?.баз()

Лямбды

Kotlin обеспечивает поддержку функции высшего порядка и анонимные функции или лямбды.[29]

1 // следующая функция принимает лямбду f и выполняет f, передавая ей строку «лямбда»2 // обратите внимание, что (s: String) -> Unit указывает лямбда с параметром String и типом возвращаемого значения Unit3 весело executeLambda(ж: (s: Строка) -> Единица измерения) {4     ж("лямбда")5 }

Лямбды объявляются фигурными скобками, { } . Если лямбда принимает параметры, они объявляются в фигурных скобках и сопровождаются -> оператор.

1 // следующий оператор определяет лямбду, которая принимает единственный параметр и передает его функции println2 вал л = { c : Любой? -> println(c) }3 // лямбды без параметров можно просто определить с помощью {}4 вал l2 = { Распечатать("без параметров") }

Пример сложного "привет, мир"

 1 весело основной(аргументы: Множество<Строка>) { 2     приветствовать { 3         к.место 4     }.Распечатать() 5 } 6  7 // Встроенные функции высшего порядка 8 встроенное веселье приветствовать(s: () -> Строка) : Строка = приветствие и другой s() 9 10 // Инфиксные функции, расширения, вывод типов, типы, допускающие значение NULL, 11 // лямбда-выражения, помеченные этим, оператор Элвиса (? :)12 инфикс весело Строка.и другой(Другой : Любой?) = buildString() 13 { 14     добавить(это@и другой); добавить(" "); добавить(Другой ?: "") 15 }16 17 // Неизменяемые типы, делегированные свойства, отложенная инициализация, строковые шаблоны18 вал приветствие к ленивый { вал doubleEl: Строка = "ll"; "он $ {doubleEl} o" }19 20 // Запечатанные классы, сопутствующие объекты21 запечатанный класс к { товарищ объект { вал место = "Мир"} }22 23 // Расширения, блок24 весело Строка.Распечатать() = println(это)

инструменты

  • IntelliJ IDEA имеет подключаемый модуль для Kotlin.[30] IntelliJ IDEA 15 была первой версией, которая объединила плагин Kotlin в IntelliJ Installer и предоставила поддержку Kotlin из коробки.[31]
  • JetBrains также предоставляет плагин для Затмение.[32][33]
  • Поддерживается интеграция с распространенными инструментами сборки Java, включая Apache Maven,[34] Apache Ant,[35] и Gradle.[36]
  • Android Studio (на основе IntelliJ IDEA) имеет официальную поддержку Kotlin, начиная с Android Studio 3.[37]
  • Emacs имеет режим Kotlin в репозитории пакетов Melpa.
  • Vim есть плагин, поддерживаемый на Github.[38]
  • Json2Kotlin генерирует POJO стиль собственного кода Kotlin для сопоставления ответов веб-службы.

Приложения

Kotlin широко используется на стороне сервера, и Android разработка. На Android платформа на какое-то время застряла на Java 7 (с некоторыми современными языковыми функциями, доступными благодаря использованию Retrolambda[39] или набор инструментов Jack[40]) и Kotlin предлагает множество улучшений для программистов, таких как безопасность нулевого указателя, функции расширения и инфиксная нотация. Сопровождается полной совместимостью с Java и хорошей поддержкой IDE (Android Studio[41]) он призван улучшить читаемость кода, упростить расширение классов Android SDK и ускорить разработку.[42]

Kotlin был объявлен официальным языком разработки Android на Google I / O 2017. Он стал третьим языком, полностью поддерживаемым для Android, помимо Java и C ++.[43]

В Spring Framework официально добавлена ​​поддержка Kotlin[44] с версией 5 от 4 января 2017 г. перед анонс Android, сделанный Google на Google I / O 2017. Часть официальной поддержки Kotlin в Spring охватывает документацию,[45] поддержка библиотеки,[46] и видео-презентации.[47] Многие другие серверные библиотеки / фреймворки, такие как Ktor,[48] и Vert.x[49] предоставить официальную поддержку Kotlin. Google Cloud Platform официально поддерживает Kotlin,[50] однако другие облачные платформы, такие как AWS (Amazon Web Services) и Azure, официально не предоставляют поддержку Kotlin, хотя известно, что Kotlin работает на этих платформах.

Котлин в основном используется в новых проектах[51] (96%), и в основном используется в рабочих проектах (75%), за которыми следуют личные проекты (68%). На Kotlin разрабатываются следующие типы программного обеспечения:

  • Мобильный (56%)
  • Веб-сервер (47%)
  • Библиотека / фреймворк (28%)
  • Инструменты (20%)

Linux - главная цель[52] используется в проектах Kotlin Native (74%), затем идут Android (48%) и MacOS (47%).

Принятие

В 2018 году Kotlin был самым быстрорастущим языком на GitHub: количество разработчиков было в 2,6 раза больше, чем в 2017 году.[53] Это четвертый по популярности язык программирования согласно опросу разработчиков Stack Overflow 2020.[54]

Котлин также был награжден премией O'Reilly Open Source Software Conference Breakout Award за 2019 год.[55]

Многие компании / организации использовали Kotlin для внутренней разработки:

Некоторые компании / организации использовали Kotlin для веб-разработки:

Ряд компаний публично заявили об использовании Kotlin:

Смотрите также

Рекомендации

  • Эта статья содержит цитаты из руководств Kotlin, выпущенных под лицензией Apache 2.0.
  1. ^ "JetBrains / kotlin". GitHub.
  2. ^ "Каково правильное английское произношение Kotlin?". 16 октября 2019 г.. Получено 9 ноября 2019.
  3. ^ "kotlin-stdlib". kotlinlang.org. JetBrains. Получено 20 апреля 2018.
  4. ^ "Kotlin для JavaScript - язык программирования Kotlin". Котлин. Получено 20 августа 2020.
  5. ^ «Котлин для кроссплатформенной мобильной разработки». JetBrains: инструменты разработчика для профессионалов и команд. Получено 20 августа 2020.
  6. ^ «Kotlin Foundation - язык программирования Kotlin». Котлин.
  7. ^ а б «Kotlin - теперь предпочтительный язык Google для разработки приложений для Android». TechCrunch. Получено 8 мая 2019.
  8. ^ "Котлин FAQ". Kotlin позволяет вам выбрать версию JVM для выполнения. По умолчанию компилятор Kotlin / JVM создает байт-код, совместимый с Java 6. Если вы хотите использовать оптимизацию, доступную в более новых версиях Java, вы можете явно указать целевую версию Java от 8 до 13. Обратите внимание, что в этом случае результирующий байт-код может не работать в более низких версиях.
  9. ^ «Что нового в Kotlin 1.4 - язык программирования Kotlin». Котлин. Получено 20 августа 2020. Kotlin теперь может генерировать аннотации типов в байт-коде JVM (целевая версия 1.8+) [..] Обратите внимание, что аннотации типов из стандартной библиотеки на данный момент не генерируются в байт-коде, поскольку стандартная библиотека скомпилирована с целевой версией 1.6.
  10. ^ а б Криль, Пол (22 июля 2011 г.). "JetBrains готовит язык JVM Kotlin". InfoWorld. В архиве из оригинала 7 сентября 2019 г.. Получено 2 февраля 2014.
  11. ^ Уотерс, Джон (22 февраля 2012 г.). «Kotlin становится открытым исходным кодом». ADTmag.com. 1105 Enterprise Computing Group. В архиве из оригинала 18 февраля 2014 г.. Получено 2 февраля 2014.
  12. ^ Мебиус (8 января 2015 г.), Андрей Бреслав - Kotlin для Android: коротко и ясно, получено 28 мая 2017
  13. ^ Кирон Мерфи (4 октября 1996 г.). «Так почему они решили назвать это Java?». JavaWorld. В архиве с оригинала 15 марта 2019 г.. Получено 14 октября 2017.
  14. ^ «Зачем JetBrains нужен Kotlin». мы ожидаем, что Kotlin будет стимулировать продажи IntelliJ IDEA
  15. ^ «Выпущен Kotlin 1.0: прагматический язык для JVM и Android | Блог Kotlin». Blog.jetbrains.com. 15 февраля 2016 г.. Получено 11 апреля 2017.
  16. ^ Шафиров, Максим (17 мая 2017 г.). «Котлин на Android. Теперь официально». Сегодня на презентации Google I / O команда Android объявила о первоклассной поддержке Kotlin.
  17. ^ «Выпущен Kotlin 1.2: совместное использование кода между платформами | Блог Kotlin». blog.jetbrains.com. 28 ноября 2017.
  18. ^ «Мультиплатформенные проекты - язык программирования Kotlin». Котлин. Получено 20 августа 2020. Работа на всех платформах - явная цель для Kotlin, но мы рассматриваем ее как предпосылку к гораздо более важной цели: совместное использование кода между платформами. Благодаря поддержке JVM, Android, JavaScript, iOS, Linux, Windows, Mac и даже встроенных систем, таких как STM32, Kotlin может обрабатывать любые и все компоненты современного приложения.
  19. ^ "Kotlin / kotlin-full-stack-application-demo". Котлин. 3 апреля 2020 г.. Получено 4 апреля 2020.
  20. ^ «Демонстрация полного стека приложения Kotlin: обновите все связанные версии для работы с выпуском 1.3.70». youtrack.jetbrains.com. Получено 4 апреля 2020.
  21. ^ «Что нового в Kotlin 1.4 - язык программирования Kotlin». Котлин. Получено 20 августа 2020. В версии 1.4.0 мы немного изменили Swift API, созданный из Kotlin, в отношении способа преобразования исключений.
  22. ^ "Расширенное интервью JVM Languages ​​Report с создателем Kotlin Андреем Бреславом". Zeroturnaround.com. 22 апреля 2013 г.. Получено 2 февраля 2014.
  23. ^ «Точка с запятой». jetbrains.com. Получено 8 февраля 2014.
  24. ^ «Базовый синтаксис». Котлин. Jetbrains. Получено 19 января 2018.
  25. ^ "функции". jetbrains.com. Получено 8 февраля 2014.
  26. ^ «Что нового в Kotlin 1.3 - язык программирования Kotlin». Котлин. Получено 4 апреля 2020.
  27. ^ «Вопросы проектирования по контракту (DbC)». Kotlin Обсуждения. 16 августа 2012 г.. Получено 4 апреля 2020. Реализуйте полную семантику Eiffel DbC и улучшите ее.
  28. ^ «Примеры Kotlin: изучение программирования на Kotlin на примере».
  29. ^ «Функции высшего порядка и лямбды». Котлин. Jetbrains. Получено 19 января 2018.
  30. ^ «Репозиторий плагинов Kotlin :: JetBrains». Plugins.jetbrains.com. 31 марта 2017 г.. Получено 11 апреля 2017.
  31. ^ «Что нового в IntelliJ IDEA 2017.1». Jetbrains.com. Получено 11 апреля 2017.
  32. ^ «Начало работы с Eclipse Neon - язык программирования Kotlin». Kotlinlang.org. 10 ноября 2016 г.. Получено 11 апреля 2017.
  33. ^ "JetBrains / kotlin-eclipse: плагин Kotlin для Eclipse". GitHub. Получено 11 апреля 2017.
  34. ^ «Использование Maven - язык программирования Kotlin». kotlinlang.org. Получено 9 мая 2017.
  35. ^ «Использование языка программирования Ant - Kotlin». kotlinlang.org. Получено 9 мая 2017.
  36. ^ «Использование Gradle - язык программирования Kotlin». kotlinlang.org. Получено 9 мая 2017.
  37. ^ «Котлин и Android». Разработчики Android.
  38. ^ "udalov / kotlin-vim: плагин Kotlin для Vim. Особенности: подсветка синтаксиса, базовые отступы, поддержка синтаксиса". GitHub. Получено 30 августа 2019.
  39. ^ "orfjackal / retrolambda: Backport лямбда-выражений Java 8 в Java 7, 6 и 5". GitHub. Получено 9 мая 2017.
  40. ^ "Джек (Java-компилятор Android) | Проект с открытым исходным кодом Android". source.android.com. Получено 15 апреля 2016.
  41. ^ "Репозиторий плагинов JetBrains :: Kotlin". plugins.jetbrains.com. Получено 15 апреля 2016.
  42. ^ "Заменит ли Kotlin Java?". themindstudios.com. Получено 10 марта 2017.
  43. ^ Лардинуа, Фредерик (17 мая 2017 г.). «Google делает Kotlin первоклассным языком для написания приложений для Android». techcrunch.com. Получено 28 июн 2018.
  44. ^ «Представляем поддержку Kotlin в Spring Framework 5.0». Основной. Получено 29 сентября 2020.
  45. ^ «Создание веб-приложений с помощью Spring Boot и Kotlin». spring.io. Получено 29 сентября 2020.
  46. ^ "библиотека спринг-фу". Pivotal. 28 сентября 2020 г.. Получено 29 сентября 2020.
  47. ^ «Состояние поддержки Котлина весной». YouTube. Получено 29 сентября 2020.
  48. ^ «Ктор». Ktor Framework. Получено 29 сентября 2020.
  49. ^ "Руководство по Vert.x Core". vertx.io. Получено 29 сентября 2020.
  50. ^ «Создайте приложение Kotlin Spring с помощью Google Cloud Platform». codelabs.developers.google.com.
  51. ^ «Состояние девелоперской экосистемы в 2020 году». jetbrains.com. Получено 29 сентября 2020.
  52. ^ «Котлин 2019 - Состояние экосистемы разработчиков в 2019 году». JetBrains. Получено 29 сентября 2020.
  53. ^ «Состояние октовселенной». Архивировано из оригинал 22 марта 2019 г.. Получено 24 июля 2019.
  54. ^ «Опрос разработчиков Stack Overflow 2020». Получено 28 мая 2020.
  55. ^ «Котлин получил награду« Прорывный проект года »на OSCON '19». Получено 24 июля 2019.
  56. ^ «Состояние Котлина на Android». YouTube. Получено 29 сентября 2020.
  57. ^ «KotlinConf 2019: Kotlin устанавливает налоги в Норвегии, авторы Ярле Хансен и Андерс Миккельсен». YouTube. Получено 29 сентября 2020.
  58. ^ "Gradle Kotlin DSL Primer". docs.gradle.org. Получено 29 сентября 2020.
  59. ^ «QLDB на Amazon». Говорящий Котлин. Получено 29 сентября 2020.
  60. ^ «Переход на полную мультиплатформенность Kotlin». Говорящий Котлин. Получено 29 сентября 2020.
  61. ^ "Котлесс". Говорящий Котлин. Получено 29 сентября 2020.
  62. ^ «Использование Kotlin для разработки серверной части в Flux». Говорящий Котлин. Получено 29 сентября 2020.
  63. ^ «Котлин в Аллегро». Говорящий Котлин. Получено 29 сентября 2020.
  64. ^ «Гринфилд Котлин в OLX». Говорящий Котлин. Получено 29 сентября 2020.
  65. ^ «Котлин в Шазаме». Говорящий Котлин. Получено 29 сентября 2020.
  66. ^ «Мониторинг приложений с помощью микрометра». Говорящий Котлин. Получено 29 сентября 2020.
  67. ^ "Взаимодействие Groovy и Kotlin в Rocket Travel". Говорящий Котлин. Получено 29 сентября 2020.
  68. ^ "Котлин на сервере в Meshcloud". Говорящий Котлин. Получено 29 сентября 2020.
  69. ^ «Zally - API ЛИНТЕР». Говорящий Котлин. Получено 29 сентября 2020.
  70. ^ "KotlinConf 2019: Котлин в космосе Максима Мазина". YouTube. Получено 29 сентября 2020.
  71. ^ «KotlinConf 2017 - Frontend Kotlin from the Trenches, автор Гаэтан Зоритчак». YouTube. Получено 29 сентября 2020.
  72. ^ «Фриц2». Говорящий Котлин. Получено 29 сентября 2020.
  73. ^ "Разработчик Java / Kotlin - Barclays - Прага - Wizbii". Wizbii.com. Получено 29 сентября 2020.
  74. ^ «Kotlin in Production - что работает, что сломано». Blog.dripstat.com. 24 сентября 2016 г.. Получено 11 апреля 2017.
  75. ^ «Как мы сделали Android-приложение Basecamp 3 на 100% Kotlin - Signal v. Noise». Сигнал против шума. 29 апреля 2017 г.. Получено 1 мая 2017.
  76. ^ «Droidcon NYC 2016 - Kotlin в производстве». Получено 24 июля 2019.
  77. ^ "Стать двуязычным @ coursera". Получено 24 июля 2019.
  78. ^ "Роб Спилденнер в твиттере". Получено 24 июля 2019.
  79. ^ «2017 Кто использует Котлин?». Получено 24 июля 2019.
  80. ^ "квадрат / sqldelight". Получено 24 июля 2019.
  81. ^ «Дэн Лью в Твиттере». Получено 24 июля 2019.
  82. ^ "Duolingo в Твиттере". Получено 13 апреля 2020.
  83. ^ «Kotlin 1.1 выпущен с поддержкой JavaScript, сопрограммами и многим другим». Получено 1 мая 2017.

внешняя ссылка