Kotlin как первый язык программирования
Что такое Kotlin и с чем его едят: обучающее руководство и сравнение нового языка Android-разработки с Java
Kotlin — это относительно молодой язык от российской компании JetBrains. Появился он в 2011 году. На конференции Google I/O 2017 команда разработчиков Android сообщила, что Kotlin получил официальную поддержку для разработки Android-приложений.
Как и Java, C и C++, Kotlin — это статически типизированный язык. Он поддерживает как объектно-ориентированное, так и процедурное программирование. По аналогии с вышеупомянутыми языками, основной код Kotlin-программы пишется в функции main , которой передаётся массив аргументов командной строки:
Вот основные возможности и преимущества Kotlin:
- компилируется в байткод JVM или в JavaScript;
- программы могут использовать все существующие Java-фреймворки и библиотеки. Kotlin можно интегрировать с Maven, Gradle и другими системами сборки;
- язык очень прост для изучения;
- исходный код открыт;
- в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin и наоборот;
- язык null-безопасен — надоедливые NullPointerException остались в Java. Вот пример кода:
- легко читаемый синтаксис не составит проблем при code review.
Разберём некоторые из них поподробнее.
Null-безопасность
При попытке присваивания или возвращения null код не скомпилируется. Тем не менее, в языке есть поддержка Nullable-типов. Задать такую переменную или функцию можно, приписав ? к названию типа:
Гибкость и простота синтаксиса
Простые функции и структуры можно объявить одной строкой. Геттеры и сеттеры задаются за кулисами для интероперабельности с Java-кодом. Добавление data-аннотации к классу активирует автоматическую генерацию различных шаблонов.
Рассмотрим следующий пример:
Отличия от Java
Null-безопасность
Как уже говорилось ранее, Kotlin не допускает возникновения NullPointerException, выдавая ошибку компиляции.
Классы данных (Data Classes)
В Kotlin появились специальные классы, предназначенные специально для хранения данных. Они генерируют различные шаблоны: equals() , hashCode() , toString() , геттеры и сеттеры и т.д. Сравните код на Java:
Легко создавать копии классов данных при помощи метода copy() :
Функции-расширения
Kotlin позволяет расширять функциональность существующих классов, не прибегая к наследованию. Это делается при помощи функций-расширений. Для объявления такой функции к её имени нужно приписать префикс в виде расширяемого типа. Вот так можно добавить функцию swap в MutableList :
Ключевое слово this внутри функции-расширения относится к объекту-получателю, который передаётся перед точкой. Теперь мы можем применить функцию swap к любому изменяемому списку:
Умные приведения типов
Компилятор Kotlin очень умён, когда речь заходит о приведениях типов. В большинстве случаев не требуется явно указывать операторы приведения, поскольку в языке есть оператор is , который делает за вас всю работу:
Вывод типов
В Kotlin необязательно явно указывать тип переменной:
Функциональное программирование
Важно отметить, что Kotlin заточен под функциональное программирование. Он предоставляет большое количество полезных возможностей, например, функции высшего порядка, лямбда-выражения, перегрузку операторов и ленивые вычисление логических выражений. Вот пример работы с коллекциями:
Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов и возвращают функции. Рассмотрим следующий пример:
В нём func — это имя аргумента, а ( ) -> Unit — это тип функции. Мы говорим, что func будет функцией, не принимающей аргументов и ничего не возвращающей.
Лямбда-выражения, или анонимные функции — это функции, которые не объявляются, а передаются в виде выражений. Вот пример:
Мы объявляем переменную sum , которая берёт два числа, складывает их и принимает значение суммы, приведённое к целому. Для вызова достаточно простого sum(2,2) .
Сравнение скорости Java и Kotlin
Первая сборка Kotlin-кода занимает примерно на 15–20% больше времени, чем аналогичный процесс на Java. Однако инкрементная сборка Kotlin даже немного быстрее, чем у Java. Таким образом, языки примерно равны по скорости компиляции.
Будущее Kotlin
Kotlin — это следующий этап развития Java, с которой он полностью совместим. Это делает его отличным инструментом для мобильных и энтерпрайз-приложений. А поскольку Kotlin теперь является официальным языком Android, можно не бояться, что, изучив его, вы останетесь без работы.
В изучении этого языка вам поможет серия статей, описывающая процесс создания простого мобильного приложения Keddit — клиента для популярного ресурса Reddit. Все ее части для вашего удобства мы перечислили в списке ниже.
Вам потребуются следующие библиотеки:
- Retrofit 2.0;
- RxJava;
- Picasso;
- RecyclerView;
- Расширения Kotlin для Android;
- Dagger 2.
Все исходники доступны на GitHub. Серия состоит из следующих частей:
Если вам удобнее видеоформат, обратите внимание на русскоязычный видеокурс по Kotlin.
Введение в язык Kotlin
Kotlin представляет современный, статически типизированный и один из самых быстроразвивающихся языков программирования, созданный и развиваемый компанией JetBrains. Kotlin можно использовать для создания самых разных приложений. Это и приложения для мобильных устройств — Android, iOS. Причем Kotlin позволяет писать кроссплатформенный код, который будет применяться на всех платформах. Это и веб-приложения, причем как серверные приложения, которые отрабатывают на стороне на стороне сервера — бекэнда, так и браузерные клиентские приложения — фронтенд. Kotlin также можно применять для создания десктопных приложений, для Data Science и так далее.
Таким образом, круг платформ, для которых можно создавать приложения на Kotlin, чрезвычайно широк — Windows, Linux, Mac OS, iOS, Android.
Самым популярным направлением, где применяется Kotlin, является прежде всего разработка под ОС Android. Причем настолько популярным, что компания Google на конференции Google I/O 2017 провозгласила Kotlin одним из официальных языков для разработки под Android (наряду с Java и C++), а инструменты по работе с данным языком были по умолчанию включены в функционал среды разработки Android Studio начиная с версии 3.0.
Официальный сайт языка — https://kotlinlang.org/, где можно найти самую последнюю и самую подробную информацию по языку.
Первая версия языка вышла 15 февраля 2016 года. Хотя сама разработка языка велась с 2010 года. Текущей версией языка на данный момент является версия 1.5, которая вышла 5 мая 2021 года.
Kotlin испытал влияние многих языков: Java, Scala, Groovy, C#, JavaScript, Swift и позволяет писать программы как в объектно-ориентированном, так и в функциональном стиле. Он имеет ясный и понятный синтаксис и довольно легок для обучения.
Но Kotlin — это не просто очередной язык программирования. На сегодняшний день это целая экосистема:
Ядро этой экосистемы — Common Kotlin , которое включает в себя собственно язык, основные библиотеки и базовые инструменты для построения программ.
Для взаимодействия с конкретной платформой имеются предназначенные для этой платформы версия Kotlin: Kotlin/JVM , Kotlin/JS и Kotlin/Native . Эти специфические версии представляют расширения для языка Kotlin, а также специфичные для конкретной платформы бибилиотеки и инструменты разработки.
В будущем вся эта экосистема будет объединена в единую платформу Kotlin Multiplatform , которая на данный момент находится в альфа-версии.
Также стоит отметить, что Kotin развивается как opensource, исходный код проекта можно посмотреть в репозитории на github по адресу https://github.com/JetBrains/kotlin/.
Первая программа на Kotlin
Создадим первую программу на языке Kotlin. Что для этого необходимо? Для набора кода программы понадобится текстовый редактор. Это может быть любой тестовый редактор, например, Notepad++ или Visual Studio Code. И для компиляции программы необходим компилятор.
Кроме того, необходимо установить JDK (Java Development Kit). Загрузить пакеты JDK для установки можно с сайта компании Oracle — http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Загрузить компилятор непосредственно для самого языка Kotlin можно по адресу https://github.com/JetBrains/kotlin/releases/latest/. В самом низу страницы мы можем найти общую версию компилятора, версии компилятора Kotlin/Native для разных операционных систем, а также исходный код. Загрузим файл kotlin-compiler-1.5.0.zip :
По выше указанному адресу можно найти архив. Загрузим и распакуем из архива папку kotlinc . В распакованном архиве в папке bin мы можем найти утилиту kotlinc , с помощью которой и будет производиться компиляция:
Теперь определим на жестком диске каталог для файлов с исходным кодом. Например, в моем случае каталог будет находиться по пути c:/kotlin . В этом каталоге создадим текстовый файл и переименуем его в app.kt . Расширение kt — это расширение файлов на языке Kotlin.
Далее определим в этом файле код, который будет выводить некоторое сообщение на консоль:
Точкой входа в программу на Kotlin является функция main . Для определения функции применяется ключевое слово fun , после которого идет название функции — то есть main . Даннуя функция не принимает никаких параметров, поэтому после названия функции указываются пустые скобки.
Далее в фигурных скобках определяются собственно те действия, которые выполняет функция main. В данном случае внутри функции main выполняется другая функция — println() , которая выводит некоторое сообщение на консоль.
Откроем командную строку. Вначале с помощью команды cd перейдем к папке, где находится файл app.kt . Затем для компиляции программы введем следующую команду:
В данном случае мы передаем компилятору c:\kotlin\bin\kotlinc для компиляции файл app.kt. (Чтобы не писать полный путь к компилятору, путь к нему можно добавить в переменную PATH в переменных среды). Далее с помощью параметра -include-runtime указывается, что создаваемый файл будет включать среду Kotlin. А параметр -d указывает, как будет называться создаваемый файл приложения, то есть в данном случае это будет app.jar .
После выполнения этой команды будет создан файл app.jar. Теперь запустим его на выполнение. Для этого введем команду
В данном случае считается, что путь к JDK, установленном на компьютере, прописан в переменной PATH в переменных среды. Иначе вместо «java» придется писать полный путь к утилите java.
Kotlin-Polytech/KotlinAsFirst2020
Решите приведённые в проекте задачи, чтобы научиться программировать на Котлине. Сейчас доступны двенадцать групп задач (уроков).
- Простые функции.
- Ветвления.
- Циклы.
- Работа со списками.
- Работа с ассоциативными массивами (Maps).
- Разбор строк.
- Работа с файлами.
- Простые классы.
- Сложные классы на примере матриц.
- Cинтаксический разбор.
- Классы с арифметическими операциями.
- Классы-контейнеры.
В директории tutorial имеется учебное пособие по Котлину на русском языке. Оно содержит введение и девять разделов, каждый из которых относится к соотвествующему уроку в проекте. Разделы 11 и 12 находятся в разработке. Также пособие включает дополнительные разделы, не включающие задач:
Почему вам стоит выучить Kotlin?
Всем привет! Я Анна Жаркова, Senior iOS/Android разработчик компании Usetech, архитектор мобильных приложений и тимлид. В коммерческой разработке более 6 лет, в мобильной 8 лет. Пишу на Swift/Objective-C под iOS, Java/Kotlin под Android, укрощаю Xamarin (как Xamarin iOS/Android, так и Xamarin Forms).
Современному разработчику приложений, в том числе и мобильных, доступен широкий выбор языков и технологий практически на все вкусы и случаи жизни. Одни языки рождаются и становятся популярными, другие, наоборот, уходят в тень. Одни выигрывают за счёт своей необычности, другие — за счёт достоинств, новых версий и широкой используемости. Но опять же, у какого какие потребности. В этой статье я хочу привести весомые аргументы в пользу того, чтобы выучить Kotlin.
Итак, Кotlin — это …
Современный, лаконичный и безопасный язык разработки от компании JetBrains, работающий поверх Java Virtual Machine (JVM). При его создании компания руководствовалась собственной необходимостью, и первоначально это была технология для внутренней работы. Уже в 2011 году язык был представлен общественности, а в 2012 стал открыт исходных код. Так что, извините, iOS -разработчики, но в споре, что появилось раньше, и кто кем вдохновлялся, Kotlin или Swift, побеждает Kotlin.
Это статически-типизированный, объекто-ориентированный язык программирования. Среди его достоинств создатели отмечают прагматичность и гибкость. Язык одинаково хорош как для начинающих программистов, так и опытных.
Язык активно развивается. Текущая версия 1.5.20.
Также стоит отметить выразительность и краткость Kotlin:
В отличие от своего предшественника, Java, Kotlin более безопасен. В семантику языка заложены принципы, которые предотвращают целый ряд очень распространённых ошибок, которые обычно случаются в момент исполнения программы. Например, Kotlin обеспечивает механизм Null safety за счёт поддержки Nullable переменных и безопасной проверки с помощью распаковки опционального значения. Также Kotlin поддерживает безопасную проверку и приведение типов:
И да, Kotlin полностью совместим с Java. Вы можете использовать как существующую библиотеку, написанную под JVM, так и постепенно мигрировать с приложения, написанного на Java. Также IDE Intelij Idea и Android Studio поддерживают автоматическую конвертацию Java кода в Kotlin.
Также у Kotlin есть поддержка уникального механизма структурированного параллелизма (structured concurrency). Корутины Kotlin представляют собой простой и удобный в использовании способ организации работы с многопоточностью в приложении. Внутри Kotlin, работающего поверх JVM, остается тот же механизм работы с потоками и асинхронностью, что и в Java, но благодаря Kotlin Coroutines нам не нужно работать с ними напрямую, и мы получаем довольно легковесное во всех смыслах решение:
Складывается впечатление, что Kotlin — это Java, только лучше и удобнее, с богатыми синтаксическим возможностями. Но это не совсем так. Подробнее о различиях между языками смотрите здесь. В принципе парадигма использования по желанию либо Kotlin, либо Java, либо оба языка вместе, имеет место быть.
Основной язык разработки мобильных приложений под Android
В 2017 году на Google I/O анонсировали поддержку языка Kotlin для разработки приложений под Android с помощью IDE Android Studio. Спустя 2 года на I/O 2019 Google объявили Kotlin приоритетным языком для разработки Android приложений (Kotlin-First) и рекомендовали начинать новые проекты уже на Kotlin: «Меньше кода для вас, меньше кода писать, проще тестировать и поддерживать». Также Kotlin-First означает приоритетность выпуска новых API и библиотек (Jetpack API) именно на Kotlin.
Согласно статистике Google (I/O 2021), Kotlin сейчас и самый популярный язык разработки. Причем не только самих приложений под Android, но и различных библиотек и решений, в том числе серверных и кроссплатформенных (см. ниже). 1000 топовых (по установкам) приложений из Google Play содержат 80% кода на Kotlin. 60% всех разработчиков Android пишут свой код именно на Kotlin.
Больше 70 приложений самой компании Google написаны на Kotlin. Сервисы Maps, Places, Firebase и другие давно используют Kotlin. Также Google отмечают, что благодаря их совместной работе с JetBrains над компилятором, разработка на Kotlin становится быстрее и производительнее, чем на Java.
Итак, какие же расширения (KTX) и библиотеки Kotlin облегчают и улучшают разработку библиотек и приложений:
- Kotlin Symbol Processing (KSP), мощный и в то же время простой API, который напрямую анализирует код, написанный на Kotlin, и способен работать в 2 раза быстрее с некоторыми библиотеками, например, Room. Также он поддерживается кроссплатформенно.
- Android Jetpack Compose;
- Android Jetpack API;
- Kotlin Coroutines, Flows, DataStore, Paging….
- Kotlin Serialize;
- Android Lifecycle KTX;
- И многие другие.
Больше информации смотрите в видео State of Kotlin.
В общем, если вы Android-разработчик, то советую выучить Kotlin.
Технология кроссплатформенной разработки Kotlin Multiplatform
Kotlin можно использовать не только для Android, но и для других платформ, а также кроссплатформенно.
Kotlin multiplatform — это SDK для кросс-платформенной-разработки от компании JetBrains. Данная технология позволяет писать модуль общего расшариваемого кода на Kotlin, компилировать с помощью JVM в байт-код для Android и LLVM в байт-код под iOS и подключать как библиотеку к нативным приложениям.
Так как общий код может включать в себя практически всё, кроме UI и особо специфического платформенного программного кода, то использовать KMM позволяет ускорить и упростить параллельную разработку приложения под обе платформы.
Помимо блока common кода модуль содержит платформенные модули, позволяющие дополнять реализацию функционала для поддержки используемых платформ.
Для каждой из поддерживаемых платформ (это не только iOS, Android, но и JS, Windows, MacOS и тому подобное) Kotlin Multiplatform использует свою версию языка, адаптированную под индивидуальные особенности платформы:
Хотя плагин KMM (Kotlin Multiplatform Mobile) и находится еще в стадии альфа (то есть в работе), он уже готов к промышленному использованию при разработке большинства приложений. Многие компании уже активно разрабатывают свои продукты на Kotlin Multiplatform.
Для разработки эффективных KMM приложений существует много готовых библиотек и фреймворков. Среди них Ktor (сетевой клиент), SqlDelight (хранилище), Coroutines, Serialization, Moko (решения от IceRock), решения от компании Badoo и многие другие.
И не только мобильные приложения.
Технологии Kotlin позволяют разрабатывать не только мобильные приложения. Kotlin JS предназначен для веба. В разработке можно использовать как решения из экосистемы языка, так и готовые библиотеки для JS, JavaScript, TypeScript.
Одним из наиболее интересных фреймворков, работающих на Kotlin JS, — Compose for Web. Специальная версия Jetpack Compose для веб-разработки. Подробнее со списком поддерживаемых решений можете ознакомиться здесь.
Также язык подходит и для бэкенда. Такие фреймворки, как Spring, уже давно активно его поддерживают.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
License
Kotlin-Polytech/KotlinAsFirst-2022
Name already in use
- Local
- Codespaces
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Котлин как первый язык программирования
Решите приведённые в проекте задачи, чтобы научиться программировать на Котлине. Сейчас доступны двенадцать групп задач (уроков).
- Простые функции.
- Ветвления.
- Циклы.
- Работа со списками.
- Работа с ассоциативными массивами (Maps).
- Разбор строк.
- Работа с файлами.
- Простые классы.
- Сложные классы на примере матриц.
- Доп. главы (синтаксический разбор, Kotlin DSL).
- Классы с арифметическими операциями.
- Классы-контейнеры.
В директории tutorial имеется учебное пособие по Котлину на русском языке. Оно содержит введение и девять разделов, каждый из которых относится к соотвествующему уроку в проекте. Разделы 11 и 12 находятся в разработке. Также пособие включает дополнительные разделы, не включающие задач:
О навыках Java, необходимых для изучения Kotlin
Когда непрограммисты или новички спрашивают меня, стоит ли им изучать Java или другой язык, я обычно отвечаю, что Java — отличный второй язык для изучения. Java настолько широко используется, что вы можете рассчитывать на то, что найдете достойную работу по программированию, как только разберетесь в ней, и у нее есть огромная, надежная экосистема библиотек и фреймворков для создания реальных приложений, и вы найдете множество руководств, классов и сообщества, которые помогут вам учиться.
Я бы не рекомендовал его в качестве первогоязыка, потому что он слишком тяжелый. Вам когда-нибудь приходилось просить новичка ввести «public-class-Something-public-static-void-main-Stringarray-args» перед написанием первой строки кода, которая что-то значит? Преимущество легковесного языка, такого как Python или JavaScript (или еще в мои школьные годы: TurboPascal), заключается в том, что новичок может сосредоточиться на изучении переменных, циклов и условий и сразу же понять их, наблюдая за выводом.
Вся концепция объектно-ориентированного программирования и языковых конструкций Java полезна для организации больших баз кода в более мелкие, согласованные фрагменты; естественный способ обучения, который заключается в том, чтобы начать с небольшой, растущей базы кода и в какой-то момент испытать потребность в лучшей организации. И вдруг вы поймете, как помогает public-static-void-main.
Котлин как первый язык программирования
Многие статьи и туториалы по Kotlin (в том числе и мои) ориентированы на Java-разработчиков, демонстрируя, что Kotlin — более продвинутый язык и достойный преемник Java: Все, что вы хотите сделать на Java, вы можете сделать то же самое на Kotlin, но короче и лучше в большинстве случаев.
Геттеры и сеттеры для ваших свойств неявно существуют, сгенерированные в байтовый код компилятором; и только если вам нужно необычное поведение, вы явно пишете собственный сеттер, который заменит неявный… звучит мощно, но довольно продвинуто, верно? Вы должны очень хорошо знать Java, чтобы иметь возможность использовать Kotlin?
Удивительно, но то, что я сказал в начале о хороших первых языках программирования для изучения, справедливо и для Kotlin! Давайте научим новичка, как работает цикл!
Помните, как это болезненно в Java?
Посмотрите тот же код в Котлине:
Вместо того, чтобы объяснять новичку, что означают class, public, static и void (или советовать пока игнорировать это), мы говорим ему: «Функция main — это точка входа каждой программы, и мы могли бы передавать аргументы в программу с этими аргументами, но нам это не нужно в начале», а затем мы можем сосредоточиться на обучении, циклах, условиях, переменных.
Более того, как только они достигнут точки, когда будут полезны пользовательские типы данных с несколькими свойствами, мы сможем ввести такие классы, как
не говоря о конструкторах, геттерах и сеттерах. Это вполне понятно, не так ли? И вы можете поместить его в один файл с вашей основной программой, где вы видите его все время. Не говоря уже об импорте и упаковках.
Мое главное возражение против ООП-курсов в колледже (и большинства книг и курсов по программированию для начинающих на Java) заключается в том, что они прикладывают так много усилий, чтобы позволить студентам запомнить весь этот синтаксис, общедоступный, частный, статический, геттеры, сеттеры, конструкторы varios, наследование, интерфейсы… пока студенты еще не до конца поняли, для чего нужны занятия! Они почти не написали никакого кода, использующего классы, но их просят написать классы со всеми этими модификаторами на экзаменах на бумаге.
По-моему, это так неправильно! Пожалуйста, пусть они сначала напишут много (процедурных) программ и научат их решать проблемы, они смогут изучить ООП позже, когда испытают проблемы, которые решает ООП! огромный скачок, чтобы представить методы для добавления поведения…
Неизменные туземцы
Но как насчет различия между обнуляемыми и необнуляемыми, изменяемыми и неизменяемыми переменными? Это ли не дополнительная сложность для изучения новичком, которой нет в Java?
Может быть. С другой стороны, нужно ли новичку в программировании знать о типах, допускающих значение NULL, и изменяемых переменных? Java-программистам требуется некоторое обучение, чтобы в полной мере использовать необнуляемые и неизменяемые элементы и получать ценность, которую эти концепции добавляют к коду.
Звучит безумно, но подумайте о том, не объясняя концепцию. null для новичка и притворяться, что каждый тип не допускает значения NULL. И притворитесь, что каждая переменная неизменяема. Можете ли вы назвать проблемы, которые этот программист не может решить? Я имею в виду, что в конечном итоге вы будете учить этому, потому что им нужно понимать эти концепции для работы с устаревшим кодом и другими языками. Но разве нельзя позволить им программировать год или около того без нулей и изменчивости, и не будет ли их код лучше читабельным и менее подверженным ошибкам с первого дня? Я хотел бы услышать ваше мнение!
Kotlin для посредственных Java-разработчиков
Когда я начинал писать эту статью, в первую очередь не планировалось, что она будет о новичках. Я немного сбился с пути, но я этому рад! 😉
Позвольте мне еще вернуться к тому, что я собирался сделать в первую очередь:
Для опытного разработчика Java раздражающая часть изучения Kotlin, вероятно, состоит в том, чтобы помнить некоторые специальные вещи: как мне написать собственный сеттер? Могу ли я объявить это свойство в конструкторе по умолчанию? Как мне написать два пользовательских конструктора с разными параметрами, разделяя некоторые пользовательские логики инициализации? Почему я не могу использовать наследование с классами данных?
С этой точки зрения кажется, что вам нужно довольно хорошо знать Java, потому что есть такие странные вещи, которые нужно изучать для Kotlin, и вы думаете, что заблудитесь, изучая стандарт -Java-подобные части и этот странный специальный синтаксис одновременно.
Но я думаю, что все наоборот: чем меньше вы знаете о Java, тем лучше для изучения Kotlin. Если бы вы никогда не слышали о геттерах и сеттерах, у вас никогда не возникло бы мысли написать нестандартный сеттер, поэтому вам не нужно запоминать синтаксис для написания пользовательских геттеров. Не вредно ли предположить, что свойства класса — это то, чем они выглядят, простые поля?
Если вы никогда не видели класс с несколькими конструкторами, вы все равно получите представление о предоставлении значений по умолчанию для некоторых аргументов в вашем первичном конструктор, не так ли? Зачем вам знать, что компилятор выводит разные конструкторы в байтовом коде?
Мой вывод: всякий раз, когда вы слышите, как кто-то говорит: «Я хотел бы выучить Kotlin, но сначала мне нужно улучшить свои навыки в Java, я не чувствую, что готов изучать другой язык». затем сильно встряхните его и скажите, чтобы он сначала не учился дурным привычкам, просто для того, чтобы потом избавиться от них.
Kotlin как первый язык программирования
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Котлин как первый язык программирования
Решите приведённые в проекте задачи, чтобы научиться программировать на Котлине. Сейчас доступны двенадцать групп задач (уроков).
- Простые функции.
- Ветвления.
- Циклы.
- Работа со списками.
- Работа с ассоциативными массивами (Maps).
- Разбор строк.
- Работа с файлами.
- Простые классы.
- Сложные классы на примере матриц.
- Доп. главы (синтаксический разбор, Kotlin DSL).
- Классы с арифметическими операциями.
- Классы-контейнеры.
В директории tutorial имеется учебное пособие по Котлину на русском языке. Оно содержит введение и девять разделов, каждый из которых относится к соотвествующему уроку в проекте. Разделы 11 и 12 находятся в разработке. Также пособие включает дополнительные разделы, не включающие задач:
Язык программирования Kotlin: что это, где применяется и за что его любят разработчики
Рассказываем про Kotlin — молодой язык родом из Питера, который вовсю теснит Java в мобильной и бэкенд-разработке.
Иллюстрация: Jeen Adams / Nikolai Prokofiev / Wikimedia Commons / Colowgee для Skillbox Media
Язык Kotlin вот уже третий год стабильно числится в любимчиках у программистов согласно опросу Stack Overflow. Его официально поддерживает Google, используют Jira и Adobe, а разработчики топовых приложений для Android переписывают на Kotlin свои продукты. Разбираемся, чем хорош этот язык, какие в нём есть фишки и сколько зарабатывают программисты.
Что такое Kotlin
Kotlin — это язык программирования, созданный в компании JetBrains. Его разработали в 2011 году на замену Java, который в компании считали чересчур многословным. Новый язык получился на 40% компактнее предшественника, что помогло ускорить работу над основным продуктом JetBrains — средой разработки IntelliJ IDEA. При этом Kotlin полностью совместим с Java, потому что запускается на его виртуальной машине (JVM).
Если же давать формальное определение, Kotlin — это объектно-ориентированный язык со статической типизацией. Что это значит?
Объектно-ориентированными называют языки, в которых все операции происходят с объектами — блоками кода, куда можно «складывать» несколько значений. Объектом может быть любая сущность с определённым набором характеристик. Например, персонаж в онлайн-игре или стикер со Спанч Бобом в Telegram. Все объекты проектируются по специальным шаблонам, которые называются классами.
Статическая типизация означает, что типы переменных задаются разработчиком до выполнения программы. Если вы объявили целочисленную переменную, текст в неё поместить уже не получится — компилятор сразу укажет на ошибку. Это замедляет разработку на начальном этапе, но добавляет надёжности.
Если хотите больше узнать про типизацию и её виды, почитайте одну из наших предыдущих статей — там всё просто и доступно написано, сразу разберётесь.
Кстати, корни теперь уже международной JetBrains — в Санкт-Петербурге. А свой язык они назвали в честь острова в Финском заливе. Помимо намёка на Питер, такое название ещё и подчёркивает связь с Java (и Ява, и Котлин — острова).
Что можно писать на Kotlin
Потенциально Kotlin можно использовать везде, где работает Java — а это и бэкенд, и веб, и десктоп, и куча других задач. Как говорит Андрей Бреслав, создатель языка, «Kotlin — это язык для всех платформ». И в этом большая доля правды.
Тем не менее у каждого языка есть своя ниша — та сфера, где его используют больше всего программистов. У Kotlin пока их две — это серверная и мобильная разработка. Хотя его всё чаще можно встретить и в других областях — например, в науке и Data Science.
Давайте рассмотрим все сферы по порядку.
Приложения для Android
До 2017 года официальным языком для Android-приложений был Java, но потом Google объявил свою мобильную ОС Kotlin-first:
- частично — из-за долгого суда с Oracle из-за использования некоторых механик Java;
- частично — потому, что разработчикам понравился новый язык, они стали стихийно писать на нём мобильные приложения и регулярно теребить корпорацию: «Вы же будете поддерживать Kotlin? Ну скажите это официально! Он хороший!»
Сегодня на Kotlin написано 80% самых скачиваемых программ в Play Market, включая приложения от Netflix, Twitter, Reddit и самого Google.
Серверные приложения
Благодаря совместимости с JVM, Kotlin можно запустить на любых серверах, где работает Java. Поэтому его часто используют для создания бэкенда — той части систем, которая выполняется на сервере и не видна обычному пользователю. Например, на Kotlin уже работают облачные сервисы Jira и некоторые продукты Adobe.
Эта ниша — одна из приоритетных для команды Kotlin. И несмотря на популярность Kotlin в мобильной разработке, DevRel-команды JetBrains говорят о своём языке исключительно в контексте серверной разработки, вообще не упоминая мобилку.
Веб-приложения (фронтенд)
Помимо бэкенда, есть ещё фронтенд — «фасадная» сторона интернета. Это разные кнопки, выпадающие меню и окошки, с которыми взаимодействуют пользователи. Почти весь фронтенд пишется на одном языке — JavaScript.
А Kotlin как раз умеет компилироваться в JavaScript — и такую его версию можно использовать для создания фронтенда. То есть на нём вполне реально написать и логику, и интерфейс — веб-приложение целиком.
Кросс-платформенные мобильные приложения
Допустим, нам нужно написать мобильное приложение для аренды самокатов. Оно должно одинаково хорошо работать и на айфонах, и на смартфонах под управлением Android.
В таком случае нам может помочь кросс-платформенная разработка — это когда мы пишем код один раз, а потом адаптируем под несколько систем. В Kotlin есть технология, которая позволяет так делать, — называется Multiplatform. Её используют уже довольно много компаний — например, тот же «Яндекс».
Наука и большие данные
Если вы работали с дата-сайенс, то наверняка знаете про Jupyter Notebook. Это среда разработки, которая может исполнять код по кусочкам и мгновенно давать результат. Её часто используют в машинном обучении, статистике и визуализации данных. Раньше в Jupyter писали только на Python, Ruby и R, но теперь можно и на Kotlin. Достаточно подключить пару библиотек, и можно делать свою Siri или Алису.
А ещё Kotlin активно осваивают учёные — например, физики и математики. Сейчас достаточно быстро развивается специальная библиотека KMath, которая приносит в Kotlin продвинутую математику и обеспечивает интеграцию с тем же TensorFlow.
Kotlin vs Java
Как мы писали выше, Java и Kotlin — функционально совместимые языки. Они действительно очень похожи: оба статически типизированы, поддерживают ООП и работают на JVM. В некоторых средах разработки их функции и классы даже можно смешивать. Теперь давайте посмотрим, чем эти языки отличаются.
Читаемость
Когда язык Java только появился, он был гораздо проще и лаконичнее конкурентов — тех же C и C++. Да у него и сейчас достаточно понятный и логичный синтаксис — правда, по современным меркам этот язык уже кажется многословным и несколько старомодным. Это и неудивительно: в Java всё вертится вокруг обратной совместимости, которая так важна для энтерпрайза, в котором «кофейный» язык является стандартом.
Создатели же Kotlin изначально делали ставку на компактность: чем меньше ненужного кода, тем проще работать программисту и тем быстрее идёт разработка. В итоге одной строкой в Kotlin можно описать то, на что в Java уйдёт восемнадцать. Сравните, как по-разному выглядят классы данных на двух языках.
Создание класса Person на Java:
Объявление того же класса на Kotlin:
Скорость
Тут шайба, кажется, на стороне Java. Он лучше адаптирован под JVM, поэтому приложения компилируются на 15–20% быстрее в сравнении с Kotlin. Однако существует такая штука, как инкрементальная компиляция — это когда пересобирается не весь проект, а только те участки, где программист внёс изменения.
Если подключить к Kotlin специальный плагин, обеспечивающий такую компиляцию, то сборка может проходить даже быстрее, чем на Java. Так что в этом пункте ничья.
Популярность
Наряду с Python и C, Java — один из самых популярных языков программирования в мире. В рейтинге TIOBE за март 2022 года Java занимает третье место, а Kotlin — пока только 31-е. Однако важно помнить, что Kotlin — язык новый, и область его применения постоянно растёт. В то же время Java всё чаще используется для поддержки старых проектов, а не для создания новых.
Безопасность
Безопасность — это то, как язык защищает программиста от его собственных ошибок. В языках со статической типизацией, таких как Java и Kotlin, компилятор следит, чтобы не смешивались несовместимые типы данных — например, строка и число.
В Kotlin вшито несколько функций, которые упрощают работу с типами — например, язык может сам привести переменные к единому типу, если того требует логика кода. Эта функция называется smart cast, или «умное преобразование».
Другие киллер-фичи Kotlin
Вот ещё несколько фишек, которые дают Kotlin преимущество в скорости, безопасности и производительности.
Корутины
Coroutines (корутины) — это средство, которое обеспечивает параллелизм, чтобы программа могла выполнять несколько операций одновременно. Когда возникает необходимость, выполнение одной функции приостанавливается с сохранением данных, и начинает работать другая функция.
Допустим, нам нужно сделать приложение — электронный дневник, чтобы ученик мог зайти в него, узнать свои оценки и посмотреть, что задали.
Если загружать с сервера все данные последовательно, то приложение будет открываться очень долго. Вместо этого ненужные пока данные (например, новости), можно вынести в корутину и поставить их подгрузку на паузу, пока грузится основной интерфейс.
Корутины позволяют расставить приоритеты в работе программы. Этот механизм напоминает многопоточность, но тратит меньше ресурсов процессора — за что их и ценят, например, в мобильной разработке.
Функции-расширения
В языках программирования с поддержкой ООП все объекты строятся по специальным шаблонам, которые называются классами. Они содержат базовые сведения о том, как должен выглядеть и работать объект.
Иногда по ходу исполнения программы нам нужно расширить класс и добавить в него новые параметры. В Kotlin это можно легко и изящно сделать с помощью специальных функций-расширений. Выглядит это так:
Null safety
Те, кто пишет на Java, часто сталкиваются с исключением под названием Null Pointer Exception. Это такая штука, которая вылезает во время выполнения программы, если в проекте есть строка, которая ссылается на переменную с нулевым значением.
В больших и сложных проектах поиск строки с ошибкой может занять много времени и сильно потрепать нервы. В Kotlin такой проблемы нет, потому что все переменные по умолчанию не нулевые. Компилятор сразу перестанет собирать проект, если значение какой-то строки равно нулю, и ошибка не вылезет в готовой программе.
Мы подробно разбирали, что такое исключения в Java и как с ними работать, в своём цикле статей.
Что по деньгам
Программировать на Kotlin пока умеет не так много разработчиков, поэтому компании готовы предлагать неплохие деньги даже новичкам. В глобальном списке лучше всего оплачиваемых языков Kotlin находится примерно посередине, обгоняя JavaScript, SQL, PHP и Java, но уступая лидерам: Perl, Go и Scala (данные Stack Overflow).
На российском рынке Kotlin в топе по зарплатам. По данным «Хабр Карьеры», за 2021 год средний оклад котлинистов вырос на 13% — со 160 до 180 тысяч рублей в месяц.
В Москве и Питере мы нашли 2100 вакансий для тех, кто умеет программировать на Kotlin. Три четверти компаний ищут Android-разработчиков, остальные — бэкендеров и аналитиков данных. Зарплаты новичков варьируются от 30 до 100 тысяч рублей, мидлов — от 120 до 250 тысяч. Сеньоры и тимлиды могут получать до полумиллиона в месяц.
Если хорошо знаете английский, можете попробовать удалённо устроиться в американскую или европейскую компанию. Kotlin-разработчики там тоже нужны, и их труд довольно хорошо оплачивается: от 4000 долларов на старте.
Но перед этим советуем хотя бы немного поработать на российском рынке — джунам без опыта получить должность за рубежом практически нереально.
С чего начать?
Kotlin — очень лаконичный язык, в нём нет формальных операций, ненужных проверок типов и других раздражающих вещей. Его легко выучить даже новичку, но сначала надо будет глубоко погрузиться в предмет.
Начните изучать Kotlin c документации — на сайте JetBrains она доступна только на английском, но есть почти официальный перевод от сообщества. Можно почитать книгу «Kotlin в действии» от создателей языка, Дмитрия Жемерова и Светланы Исаковой. Там достаточно ясно и доходчиво изложены основы языка. А ещё в JetBrains Academy можно пройти бесплатный курс по основам Kotlin — правда, он на английском.
Бесплатные гайды по Kotlin есть и у Google: как для новичков, так и для тех, кто уже умеет программировать на Java. Они тоже подойдут только тем, кто хотя бы немного дружит с английским, — перевода в открытом доступе мы найти не смогли.
У программистов есть лайфхак, как учиться быстрее и интереснее. Нужно придумать свой пет-проект и начать его делать прямо во время учёбы. Это может быть любая несложная программа: например, таск-менеджер, парсер новостей или бот в Telegram. Плюс пет-проекта в том, что в него можно встроить сложную абстракцию и сразу посмотреть, как она работает. А ещё его можно положить в портфолио и потом показывать работодателям.
На первых порах для упражнений хорошо подойдёт онлайн-компилятор Kotlin Playground. Когда будете готовы писать приложение, понадобится инструмент посерьёзнее — например, среда разработки Android Studio от Google или IntelliJ IDEA от JetBrains.
Если же интересно вкатиться именно в Android-разработку, можно выбрать курс от Skillbox «Android-разработчик». За 12 месяцев научим программировать на Kotlin, проектировать интерфейсы и создавать приложения на уровне Junior-специалиста. На выходе будет диплом — сможете написать свою соцсеть и положить её в портфолио.
Что нужно новичку
Требования работодателей к новичкам сильно зависят от ниши. Если метите в бэкенд, изучите фреймворки Kotlin для работы с сервером: например, Spring, Ktor и Vert.x. Плюсом к ним надо будет освоить протокол HTTP, форматы XML и JSON, научиться работать с SQL-запросами и одной из популярных баз данных — например, PostgreSQL.
Для разработки под Android джуну нужно знать Android SDK, уметь работать в Git и Android Studio (и/или IntelliJ IDEA), понимать, как устроены корутины и многопоточность. Ещё с вас обязательно спросят и паттерны проектирования: MVC, MVP и MVVM.
Если хотите научиться программировать, но чувствуете, что не хватит времени или терпения, поищите курсы с опытными преподавателями. Так вы точно не собьётесь с пути и уже сейчас начнёте работать в команде.
Почему вам стоит выучить Kotlin?
Всем привет! Я Анна Жаркова, Senior iOS/Android разработчик компании Usetech, архитектор мобильных приложений и тимлид. В коммерческой разработке более 6 лет, в мобильной 8 лет. Пишу на Swift/Objective-C под iOS, Java/Kotlin под Android, укрощаю Xamarin (как Xamarin iOS/Android, так и Xamarin Forms).
Современному разработчику приложений, в том числе и мобильных, доступен широкий выбор языков и технологий практически на все вкусы и случаи жизни. Одни языки рождаются и становятся популярными, другие, наоборот, уходят в тень. Одни выигрывают за счёт своей необычности, другие — за счёт достоинств, новых версий и широкой используемости. Но опять же, у какого какие потребности. В этой статье я хочу привести весомые аргументы в пользу того, чтобы выучить Kotlin.
Итак, Кotlin — это …
Современный, лаконичный и безопасный язык разработки от компании JetBrains, работающий поверх Java Virtual Machine (JVM). При его создании компания руководствовалась собственной необходимостью, и первоначально это была технология для внутренней работы. Уже в 2011 году язык был представлен общественности, а в 2012 стал открыт исходных код. Так что, извините, iOS -разработчики, но в споре, что появилось раньше, и кто кем вдохновлялся, Kotlin или Swift, побеждает Kotlin.
Это статически-типизированный, объекто-ориентированный язык программирования. Среди его достоинств создатели отмечают прагматичность и гибкость. Язык одинаково хорош как для начинающих программистов, так и опытных.
Язык активно развивается. Текущая версия 1.5.20.
Также стоит отметить выразительность и краткость Kotlin:
В отличие от своего предшественника, Java, Kotlin более безопасен. В семантику языка заложены принципы, которые предотвращают целый ряд очень распространённых ошибок, которые обычно случаются в момент исполнения программы. Например, Kotlin обеспечивает механизм Null safety за счёт поддержки Nullable переменных и безопасной проверки с помощью распаковки опционального значения. Также Kotlin поддерживает безопасную проверку и приведение типов:
И да, Kotlin полностью совместим с Java. Вы можете использовать как существующую библиотеку, написанную под JVM, так и постепенно мигрировать с приложения, написанного на Java. Также IDE Intelij Idea и Android Studio поддерживают автоматическую конвертацию Java кода в Kotlin.
Также у Kotlin есть поддержка уникального механизма структурированного параллелизма (structured concurrency). Корутины Kotlin представляют собой простой и удобный в использовании способ организации работы с многопоточностью в приложении. Внутри Kotlin, работающего поверх JVM, остается тот же механизм работы с потоками и асинхронностью, что и в Java, но благодаря Kotlin Coroutines нам не нужно работать с ними напрямую, и мы получаем довольно легковесное во всех смыслах решение:
Складывается впечатление, что Kotlin — это Java, только лучше и удобнее, с богатыми синтаксическим возможностями. Но это не совсем так. Подробнее о различиях между языками смотрите здесь. В принципе парадигма использования по желанию либо Kotlin, либо Java, либо оба языка вместе, имеет место быть.
Основной язык разработки мобильных приложений под Android
В 2017 году на Google I/O анонсировали поддержку языка Kotlin для разработки приложений под Android с помощью IDE Android Studio. Спустя 2 года на I/O 2019 Google объявили Kotlin приоритетным языком для разработки Android приложений (Kotlin-First) и рекомендовали начинать новые проекты уже на Kotlin: «Меньше кода для вас, меньше кода писать, проще тестировать и поддерживать». Также Kotlin-First означает приоритетность выпуска новых API и библиотек (Jetpack API) именно на Kotlin.
Согласно статистике Google (I/O 2021), Kotlin сейчас и самый популярный язык разработки. Причем не только самих приложений под Android, но и различных библиотек и решений, в том числе серверных и кроссплатформенных (см. ниже). 1000 топовых (по установкам) приложений из Google Play содержат 80% кода на Kotlin. 60% всех разработчиков Android пишут свой код именно на Kotlin.
Больше 70 приложений самой компании Google написаны на Kotlin. Сервисы Maps, Places, Firebase и другие давно используют Kotlin. Также Google отмечают, что благодаря их совместной работе с JetBrains над компилятором, разработка на Kotlin становится быстрее и производительнее, чем на Java.
Итак, какие же расширения (KTX) и библиотеки Kotlin облегчают и улучшают разработку библиотек и приложений:
- Kotlin Symbol Processing (KSP), мощный и в то же время простой API, который напрямую анализирует код, написанный на Kotlin, и способен работать в 2 раза быстрее с некоторыми библиотеками, например, Room. Также он поддерживается кроссплатформенно.
- Android Jetpack Compose;
- Android Jetpack API;
- Kotlin Coroutines, Flows, DataStore, Paging….
- Kotlin Serialize;
- Android Lifecycle KTX;
- И многие другие.
Больше информации смотрите в видео State of Kotlin.
В общем, если вы Android-разработчик, то советую выучить Kotlin.
Технология кроссплатформенной разработки Kotlin Multiplatform
Kotlin можно использовать не только для Android, но и для других платформ, а также кроссплатформенно.
Kotlin multiplatform — это SDK для кросс-платформенной-разработки от компании JetBrains. Данная технология позволяет писать модуль общего расшариваемого кода на Kotlin, компилировать с помощью JVM в байт-код для Android и LLVM в байт-код под iOS и подключать как библиотеку к нативным приложениям.
Так как общий код может включать в себя практически всё, кроме UI и особо специфического платформенного программного кода, то использовать KMM позволяет ускорить и упростить параллельную разработку приложения под обе платформы.
Помимо блока common кода модуль содержит платформенные модули, позволяющие дополнять реализацию функционала для поддержки используемых платформ.
Для каждой из поддерживаемых платформ (это не только iOS, Android, но и JS, Windows, MacOS и тому подобное) Kotlin Multiplatform использует свою версию языка, адаптированную под индивидуальные особенности платформы:
Хотя плагин KMM (Kotlin Multiplatform Mobile) и находится еще в стадии альфа (то есть в работе), он уже готов к промышленному использованию при разработке большинства приложений. Многие компании уже активно разрабатывают свои продукты на Kotlin Multiplatform.
Для разработки эффективных KMM приложений существует много готовых библиотек и фреймворков. Среди них Ktor (сетевой клиент), SqlDelight (хранилище), Coroutines, Serialization, Moko (решения от IceRock), решения от компании Badoo и многие другие.
И не только мобильные приложения.
Технологии Kotlin позволяют разрабатывать не только мобильные приложения. Kotlin JS предназначен для веба. В разработке можно использовать как решения из экосистемы языка, так и готовые библиотеки для JS, JavaScript, TypeScript.
Одним из наиболее интересных фреймворков, работающих на Kotlin JS, — Compose for Web. Специальная версия Jetpack Compose для веб-разработки. Подробнее со списком поддерживаемых решений можете ознакомиться здесь.
Также язык подходит и для бэкенда. Такие фреймворки, как Spring, уже давно активно его поддерживают.
Почему вам стоит выучить Kotlin?
Всем привет! Я Анна Жаркова, Senior iOS/Android разработчик компании Usetech, архитектор мобильных приложений и тимлид. В коммерческой разработке более 6 лет, в мобильной 8 лет. Пишу на Swift/Objective-C под iOS, Java/Kotlin под Android, укрощаю Xamarin (как Xamarin iOS/Android, так и Xamarin Forms).
Современному разработчику приложений, в том числе и мобильных, доступен широкий выбор языков и технологий практически на все вкусы и случаи жизни. Одни языки рождаются и становятся популярными, другие, наоборот, уходят в тень. Одни выигрывают за счёт своей необычности, другие — за счёт достоинств, новых версий и широкой используемости. Но опять же, у какого какие потребности. В этой статье я хочу привести весомые аргументы в пользу того, чтобы выучить Kotlin.
Итак, Кotlin — это …
Современный, лаконичный и безопасный язык разработки от компании JetBrains, работающий поверх Java Virtual Machine (JVM). При его создании компания руководствовалась собственной необходимостью, и первоначально это была технология для внутренней работы. Уже в 2011 году язык был представлен общественности, а в 2012 стал открыт исходных код. Так что, извините, iOS -разработчики, но в споре, что появилось раньше, и кто кем вдохновлялся, Kotlin или Swift, побеждает Kotlin.
Это статически-типизированный, объекто-ориентированный язык программирования. Среди его достоинств создатели отмечают прагматичность и гибкость. Язык одинаково хорош как для начинающих программистов, так и опытных.
Язык активно развивается. Текущая версия 1.5.20.
Также стоит отметить выразительность и краткость Kotlin:
В отличие от своего предшественника, Java, Kotlin более безопасен. В семантику языка заложены принципы, которые предотвращают целый ряд очень распространённых ошибок, которые обычно случаются в момент исполнения программы. Например, Kotlin обеспечивает механизм Null safety за счёт поддержки Nullable переменных и безопасной проверки с помощью распаковки опционального значения. Также Kotlin поддерживает безопасную проверку и приведение типов:
И да, Kotlin полностью совместим с Java. Вы можете использовать как существующую библиотеку, написанную под JVM, так и постепенно мигрировать с приложения, написанного на Java. Также IDE Intelij Idea и Android Studio поддерживают автоматическую конвертацию Java кода в Kotlin.
Также у Kotlin есть поддержка уникального механизма структурированного параллелизма (structured concurrency). Корутины Kotlin представляют собой простой и удобный в использовании способ организации работы с многопоточностью в приложении. Внутри Kotlin, работающего поверх JVM, остается тот же механизм работы с потоками и асинхронностью, что и в Java, но благодаря Kotlin Coroutines нам не нужно работать с ними напрямую, и мы получаем довольно легковесное во всех смыслах решение:
Складывается впечатление, что Kotlin — это Java, только лучше и удобнее, с богатыми синтаксическим возможностями. Но это не совсем так. Подробнее о различиях между языками смотрите здесь. В принципе парадигма использования по желанию либо Kotlin, либо Java, либо оба языка вместе, имеет место быть.
Основной язык разработки мобильных приложений под Android
В 2017 году на Google I/O анонсировали поддержку языка Kotlin для разработки приложений под Android с помощью IDE Android Studio. Спустя 2 года на I/O 2019 Google объявили Kotlin приоритетным языком для разработки Android приложений (Kotlin-First) и рекомендовали начинать новые проекты уже на Kotlin: «Меньше кода для вас, меньше кода писать, проще тестировать и поддерживать». Также Kotlin-First означает приоритетность выпуска новых API и библиотек (Jetpack API) именно на Kotlin.
Согласно статистике Google (I/O 2021), Kotlin сейчас и самый популярный язык разработки. Причем не только самих приложений под Android, но и различных библиотек и решений, в том числе серверных и кроссплатформенных (см. ниже). 1000 топовых (по установкам) приложений из Google Play содержат 80% кода на Kotlin. 60% всех разработчиков Android пишут свой код именно на Kotlin.
Больше 70 приложений самой компании Google написаны на Kotlin. Сервисы Maps, Places, Firebase и другие давно используют Kotlin. Также Google отмечают, что благодаря их совместной работе с JetBrains над компилятором, разработка на Kotlin становится быстрее и производительнее, чем на Java.
Итак, какие же расширения (KTX) и библиотеки Kotlin облегчают и улучшают разработку библиотек и приложений:
- Kotlin Symbol Processing (KSP), мощный и в то же время простой API, который напрямую анализирует код, написанный на Kotlin, и способен работать в 2 раза быстрее с некоторыми библиотеками, например, Room. Также он поддерживается кроссплатформенно.
- Android Jetpack Compose;
- Android Jetpack API;
- Kotlin Coroutines, Flows, DataStore, Paging….
- Kotlin Serialize;
- Android Lifecycle KTX;
- И многие другие.
Больше информации смотрите в видео State of Kotlin.
В общем, если вы Android-разработчик, то советую выучить Kotlin.
Технология кроссплатформенной разработки Kotlin Multiplatform
Kotlin можно использовать не только для Android, но и для других платформ, а также кроссплатформенно.
Kotlin multiplatform — это SDK для кросс-платформенной-разработки от компании JetBrains. Данная технология позволяет писать модуль общего расшариваемого кода на Kotlin, компилировать с помощью JVM в байт-код для Android и LLVM в байт-код под iOS и подключать как библиотеку к нативным приложениям.
Так как общий код может включать в себя практически всё, кроме UI и особо специфического платформенного программного кода, то использовать KMM позволяет ускорить и упростить параллельную разработку приложения под обе платформы.
Помимо блока common кода модуль содержит платформенные модули, позволяющие дополнять реализацию функционала для поддержки используемых платформ.
Для каждой из поддерживаемых платформ (это не только iOS, Android, но и JS, Windows, MacOS и тому подобное) Kotlin Multiplatform использует свою версию языка, адаптированную под индивидуальные особенности платформы:
Хотя плагин KMM (Kotlin Multiplatform Mobile) и находится еще в стадии альфа (то есть в работе), он уже готов к промышленному использованию при разработке большинства приложений. Многие компании уже активно разрабатывают свои продукты на Kotlin Multiplatform.
Для разработки эффективных KMM приложений существует много готовых библиотек и фреймворков. Среди них Ktor (сетевой клиент), SqlDelight (хранилище), Coroutines, Serialization, Moko (решения от IceRock), решения от компании Badoo и многие другие.
И не только мобильные приложения.
Технологии Kotlin позволяют разрабатывать не только мобильные приложения. Kotlin JS предназначен для веба. В разработке можно использовать как решения из экосистемы языка, так и готовые библиотеки для JS, JavaScript, TypeScript.
Одним из наиболее интересных фреймворков, работающих на Kotlin JS, — Compose for Web. Специальная версия Jetpack Compose для веб-разработки. Подробнее со списком поддерживаемых решений можете ознакомиться здесь.
Также язык подходит и для бэкенда. Такие фреймворки, как Spring, уже давно активно его поддерживают.
Стоит ли учить KOTLIN первым языком?
Язык программирования — всего лишь способ записи найденного тобой способа решения задачи. И цель обучения — не выучить язык, а научиться решать задачи. И чем больше и сложнее язык, тем больше времени обучения уйдёт на изучение особенностей языка и тем меньше времени уйдёт на собственно изучение программирования.
Потому, надо начинать с языка, удобного именно для обучения основам программирования (коими современные модные языки не являются), а уже потом переходить к промышленным языкам. В первом издании учебника Вирта использовался простой и логичный Pascal, во втором — более простая Modula-2, в актуальном — ещё более простой Oberon-07.
Kotlin как первый язык программирования
Что такое Kotlin и с чем его едят: обучающее руководство и сравнение нового языка Android-разработки с Java
Kotlin — это относительно молодой язык от российской компании JetBrains. Появился он в 2011 году. На конференции Google I/O 2017 команда разработчиков Android сообщила, что Kotlin получил официальную поддержку для разработки Android-приложений.
Как и Java, C и C++, Kotlin — это статически типизированный язык. Он поддерживает как объектно-ориентированное, так и процедурное программирование. По аналогии с вышеупомянутыми языками, основной код Kotlin-программы пишется в функции main , которой передаётся массив аргументов командной строки:
Вот основные возможности и преимущества Kotlin:
- компилируется в байткод JVM или в JavaScript;
- программы могут использовать все существующие Java-фреймворки и библиотеки. Kotlin можно интегрировать с Maven, Gradle и другими системами сборки;
- язык очень прост для изучения;
- исходный код открыт;
- в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin и наоборот;
- язык null-безопасен — надоедливые NullPointerException остались в Java. Вот пример кода:
- легко читаемый синтаксис не составит проблем при code review.
Разберём некоторые из них поподробнее.
Null-безопасность
При попытке присваивания или возвращения null код не скомпилируется. Тем не менее, в языке есть поддержка Nullable-типов. Задать такую переменную или функцию можно, приписав ? к названию типа:
Гибкость и простота синтаксиса
Простые функции и структуры можно объявить одной строкой. Геттеры и сеттеры задаются за кулисами для интероперабельности с Java-кодом. Добавление data-аннотации к классу активирует автоматическую генерацию различных шаблонов.
Рассмотрим следующий пример:
Отличия от Java
Null-безопасность
Как уже говорилось ранее, Kotlin не допускает возникновения NullPointerException, выдавая ошибку компиляции.
Классы данных (Data Classes)
В Kotlin появились специальные классы, предназначенные специально для хранения данных. Они генерируют различные шаблоны: equals() , hashCode() , toString() , геттеры и сеттеры и т.д. Сравните код на Java:
Легко создавать копии классов данных при помощи метода copy() :
Функции-расширения
Kotlin позволяет расширять функциональность существующих классов, не прибегая к наследованию. Это делается при помощи функций-расширений. Для объявления такой функции к её имени нужно приписать префикс в виде расширяемого типа. Вот так можно добавить функцию swap в MutableList :
Ключевое слово this внутри функции-расширения относится к объекту-получателю, который передаётся перед точкой. Теперь мы можем применить функцию swap к любому изменяемому списку:
Умные приведения типов
Компилятор Kotlin очень умён, когда речь заходит о приведениях типов. В большинстве случаев не требуется явно указывать операторы приведения, поскольку в языке есть оператор is , который делает за вас всю работу:
Вывод типов
В Kotlin необязательно явно указывать тип переменной:
Функциональное программирование
Важно отметить, что Kotlin заточен под функциональное программирование. Он предоставляет большое количество полезных возможностей, например, функции высшего порядка, лямбда-выражения, перегрузку операторов и ленивые вычисление логических выражений. Вот пример работы с коллекциями:
Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов и возвращают функции. Рассмотрим следующий пример:
В нём func — это имя аргумента, а ( ) -> Unit — это тип функции. Мы говорим, что func будет функцией, не принимающей аргументов и ничего не возвращающей.
Лямбда-выражения, или анонимные функции — это функции, которые не объявляются, а передаются в виде выражений. Вот пример:
Мы объявляем переменную sum , которая берёт два числа, складывает их и принимает значение суммы, приведённое к целому. Для вызова достаточно простого sum(2,2) .
Сравнение скорости Java и Kotlin
Первая сборка Kotlin-кода занимает примерно на 15–20% больше времени, чем аналогичный процесс на Java. Однако инкрементная сборка Kotlin даже немного быстрее, чем у Java. Таким образом, языки примерно равны по скорости компиляции.
Будущее Kotlin
Kotlin — это следующий этап развития Java, с которой он полностью совместим. Это делает его отличным инструментом для мобильных и энтерпрайз-приложений. А поскольку Kotlin теперь является официальным языком Android, можно не бояться, что, изучив его, вы останетесь без работы.
В изучении этого языка вам поможет серия статей, описывающая процесс создания простого мобильного приложения Keddit — клиента для популярного ресурса Reddit. Все ее части для вашего удобства мы перечислили в списке ниже.
Вам потребуются следующие библиотеки:
- Retrofit 2.0;
- RxJava;
- Picasso;
- RecyclerView;
- Расширения Kotlin для Android;
- Dagger 2.
Все исходники доступны на GitHub. Серия состоит из следующих частей:
Если вам удобнее видеоформат, обратите внимание на русскоязычный видеокурс по Kotlin.
Введение в язык Kotlin
Kotlin представляет современный, статически типизированный и один из самых быстроразвивающихся языков программирования, созданный и развиваемый компанией JetBrains. Kotlin можно использовать для создания самых разных приложений. Это и приложения для мобильных устройств — Android, iOS. Причем Kotlin позволяет писать кроссплатформенный код, который будет применяться на всех платформах. Это и веб-приложения, причем как серверные приложения, которые отрабатывают на стороне на стороне сервера — бекэнда, так и браузерные клиентские приложения — фронтенд. Kotlin также можно применять для создания десктопных приложений, для Data Science и так далее.
Таким образом, круг платформ, для которых можно создавать приложения на Kotlin, чрезвычайно широк — Windows, Linux, Mac OS, iOS, Android.
Самым популярным направлением, где применяется Kotlin, является прежде всего разработка под ОС Android. Причем настолько популярным, что компания Google на конференции Google I/O 2017 провозгласила Kotlin одним из официальных языков для разработки под Android (наряду с Java и C++), а инструменты по работе с данным языком были по умолчанию включены в функционал среды разработки Android Studio начиная с версии 3.0.
Официальный сайт языка — https://kotlinlang.org/, где можно найти самую последнюю и самую подробную информацию по языку.
Первая версия языка вышла 15 февраля 2016 года. Хотя сама разработка языка велась с 2010 года. Текущей версией языка на данный момент является версия 1.5, которая вышла 5 мая 2021 года.
Kotlin испытал влияние многих языков: Java, Scala, Groovy, C#, JavaScript, Swift и позволяет писать программы как в объектно-ориентированном, так и в функциональном стиле. Он имеет ясный и понятный синтаксис и довольно легок для обучения.
Но Kotlin — это не просто очередной язык программирования. На сегодняшний день это целая экосистема:
Ядро этой экосистемы — Common Kotlin , которое включает в себя собственно язык, основные библиотеки и базовые инструменты для построения программ.
Для взаимодействия с конкретной платформой имеются предназначенные для этой платформы версия Kotlin: Kotlin/JVM , Kotlin/JS и Kotlin/Native . Эти специфические версии представляют расширения для языка Kotlin, а также специфичные для конкретной платформы бибилиотеки и инструменты разработки.
В будущем вся эта экосистема будет объединена в единую платформу Kotlin Multiplatform , которая на данный момент находится в альфа-версии.
Также стоит отметить, что Kotin развивается как opensource, исходный код проекта можно посмотреть в репозитории на github по адресу https://github.com/JetBrains/kotlin/.
Первая программа на Kotlin
Создадим первую программу на языке Kotlin. Что для этого необходимо? Для набора кода программы понадобится текстовый редактор. Это может быть любой тестовый редактор, например, Notepad++ или Visual Studio Code. И для компиляции программы необходим компилятор.
Кроме того, необходимо установить JDK (Java Development Kit). Загрузить пакеты JDK для установки можно с сайта компании Oracle — http://www.oracle.com/technetwork/java/javase/downloads/index.html.
Загрузить компилятор непосредственно для самого языка Kotlin можно по адресу https://github.com/JetBrains/kotlin/releases/latest/. В самом низу страницы мы можем найти общую версию компилятора, версии компилятора Kotlin/Native для разных операционных систем, а также исходный код. Загрузим файл kotlin-compiler-1.5.0.zip :
По выше указанному адресу можно найти архив. Загрузим и распакуем из архива папку kotlinc . В распакованном архиве в папке bin мы можем найти утилиту kotlinc , с помощью которой и будет производиться компиляция:
Теперь определим на жестком диске каталог для файлов с исходным кодом. Например, в моем случае каталог будет находиться по пути c:/kotlin . В этом каталоге создадим текстовый файл и переименуем его в app.kt . Расширение kt — это расширение файлов на языке Kotlin.
Далее определим в этом файле код, который будет выводить некоторое сообщение на консоль:
Точкой входа в программу на Kotlin является функция main . Для определения функции применяется ключевое слово fun , после которого идет название функции — то есть main . Даннуя функция не принимает никаких параметров, поэтому после названия функции указываются пустые скобки.
Далее в фигурных скобках определяются собственно те действия, которые выполняет функция main. В данном случае внутри функции main выполняется другая функция — println() , которая выводит некоторое сообщение на консоль.
Откроем командную строку. Вначале с помощью команды cd перейдем к папке, где находится файл app.kt . Затем для компиляции программы введем следующую команду:
В данном случае мы передаем компилятору c:\kotlin\bin\kotlinc для компиляции файл app.kt. (Чтобы не писать полный путь к компилятору, путь к нему можно добавить в переменную PATH в переменных среды). Далее с помощью параметра -include-runtime указывается, что создаваемый файл будет включать среду Kotlin. А параметр -d указывает, как будет называться создаваемый файл приложения, то есть в данном случае это будет app.jar .
После выполнения этой команды будет создан файл app.jar. Теперь запустим его на выполнение. Для этого введем команду
В данном случае считается, что путь к JDK, установленном на компьютере, прописан в переменной PATH в переменных среды. Иначе вместо «java» придется писать полный путь к утилите java.
Kotlin-Polytech/KotlinAsFirst2020
Решите приведённые в проекте задачи, чтобы научиться программировать на Котлине. Сейчас доступны двенадцать групп задач (уроков).
- Простые функции.
- Ветвления.
- Циклы.
- Работа со списками.
- Работа с ассоциативными массивами (Maps).
- Разбор строк.
- Работа с файлами.
- Простые классы.
- Сложные классы на примере матриц.
- Cинтаксический разбор.
- Классы с арифметическими операциями.
- Классы-контейнеры.
В директории tutorial имеется учебное пособие по Котлину на русском языке. Оно содержит введение и девять разделов, каждый из которых относится к соотвествующему уроку в проекте. Разделы 11 и 12 находятся в разработке. Также пособие включает дополнительные разделы, не включающие задач: