Kotlin лучше Java? Как такой молодой язык программирования смог набрать популярность? В статье рассказываем о преимуществах Kotlin, разбираем примеры и сравниваем синтаксис с Java.
Что такое Kotlin
Kotlin — кросс-платформенный, объектно-ориентированный, статически типизированный язык программирования общего назначения. Это язык, в котором собрали все преимущества Java и убрали все его недостатки.
Код на Kotlin можно компилировать в байт-код JVM, транспонировать в JavaScript и даже компилировать для нативной работы без виртуальной машины.
В 2019 году, на конференции Google I/O, команда Android объявила, что Kotlin будет основным языком программирования для приложений под Android.
Преимущества
Компиляция в байт-код JVM и импорт Java-кода
Компиляция в байт-код позволит запускать код на Kotlin в любой среде, где доступна JVM. Kotlin умеет нативно импортировать Java-код — это дает возможность использовать любые существующие фреймворки, библиотеки или бизнес-логику.
Умная компиляция
Компилятор Kotlin помогает найти ошибки в момент компиляции, а не в момент выполнения программ. А анализатор кода поможет найти неинициализированные переменные и возможные утечки памяти.
Нацеленность на продуктивность разработчика
Разработчик с помощью безопасных вызовов может забыть о NullPointerException, а с помощью умного приведения типов сможет сделать код компактным.
Некоторые паттерны программирования встроены в сам язык: Singleton, Companion object и Delegated properties. Всё это создается в интуитивном синтаксисе, который можно легко применять.
Что нужно для начала работы
Исходный код компилятора Kotlin открыт и доступен на github. Есть две опции компиляции и запуска кода, написанного на Kotlin:
- Из командной строки. Все релизы компилятора доступны на github.
- С помощью IntelliJ IDEA, которую можно загрузить на официальном сайте JetBrains.
Сгенерированный проект в IntelliJ IDEA содержит файл с функцией main:
fun main(args: Array<String>) { println("Hello World!") // Try adding program arguments via Run/Debug configuration. // Learn more about running applications: https://www.jetbrains.com/help/idea/running-applications.html. println("Program arguments: ${args.joinToString()}") }
В отличие от Java, где доступен только объектно-ориентированный код, Kotlin поддерживает процедурное программирование и позволяет создавать функции вне классов.
Если хотите сначала изучить Java, приходите на курс Skypro «Java-разработчик». Узнаете, как проектировать архитектуру приложений, разрабатывать информационные системы и оптимизировать работу сайтов. Выполните практические проекты, получите диплом и гарантию трудоустройства.
Как работает Kotlin
Разберем необходимый минимум для начала работы.
Переменные
Различия между Java и Kotlin начинаются уже с синтаксиса объявления переменных:
var <имя переменной>:<тип переменной> = <значение>
и констант:
val <имя переменной>:<тип переменной> = <значение>
Базовые типы, доступные из коробки:
- числа (Float, Double, Byte, Short, Int, Long и их беззнаковые аналоги);
- boolean;
- char;
- строки;
- массивы.
Все базовые объекты в Kotlin — классы.
Null-безопасность
Предыдущий пример создания переменной подразумевает, что в нее нельзя записать null. Такой код выдаст ошибку при попытке его скомпилировать:
var nonNullVariable:Int = null
Синтаксис объявления переменной, которая может принимать null:
var nullableVariable: int? = null
Используя такой тип переменных, мы можем создавать более безопасный код:
println(nullableVariable?.toString())
Метод toString
будет вызван только в случае, если nullableVariable
не содержит null
.
Методы
Синтаксис для объявления процедур и методов:
fun <имя метода>(<список аргументов>):<тип возвращаемого значения> { <тело функции> return <возвращаемое значение> }
Если тип возвращаемого значения не указан, функция будет объявлена как void
.
Циклы
У Kotlin есть три типа циклов:
for,
while,
do-while.
Цикл for позволяет перебирать элементами коллекций:
val items: IntArray = intArrayOf(1, 2, 3) for (item: Int in items) { println(item) }
либо диапазоном чисел:
for (item: Int in 1..3) { println(item) }
while- и do-while
-циклы работают аналогично циклам в Java.
var index: Int = 1 while (index >= 3) { println(index) index += 1 } do { println("this text will be printed only once") } while (false)
Классы
Синтаксис объявления классов был унаследован от Java:
class <имя класса> { }
Чтобы познакомиться с Java, приходите на курс Skypro «Java-разработчик». На реальных задачах научитесь работать с классами, кодом, библиотеками, коллекциями. Опытные преподаватели объяснят всё доступным языком с примерами из своей практики. А наставники ответят на вопросы и помогут справиться со сложными заданиями.
По умолчанию будет создан final class
, который нельзя унаследовать. Чтобы класс был доступен для наследования, нужно добавить ключевое слово open
:
open class Base { } class Derived : Base() { }
Классы в Kotlin могут иметь один и более конструкторов. Главный конструктор объявляется в сигнатуре самого класса:
open class Base constructor(firstProperty: Int, secondProperty: Int) { } class Derived : Base { constructor(firstProperty: Int, secondProperty: Int) : super(firstProperty, secondProperty) }
Все дополнительные конструкторы могут быть перечислены в теле самого класса:
open class Base constructor(firstProperty: Int, secondProperty: Int) { constructor(firstProperty: Int) : this(firstProperty, 0) } class Derived : Base { constructor(firstProperty: Int, secondProperty: Int) : super(firstProperty, secondProperty) constructor(firstProperty: Int) : super(firstProperty) }
Чтобы выполнить код при создании экземпляра класса, используют блоки инициализации:
open class Base constructor(firstProperty: Int, secondProperty: Int) { constructor(firstProperty: Int) : this(firstProperty, 0) init { println("Base class was just created") } }
Если таких блоков несколько, они будут выполнены в том порядке, в котором объявлены в теле класса:
open class Base constructor(firstProperty: Int, secondProperty: Int) { constructor(firstProperty: Int) : this(firstProperty, 0) init { println("Base class was just created") } init { println("this init block executed later") } }
Отличия от Java
Kotlin проектировали как преемника Java — его более современную версию — и добавили в него новые конструкции, недоступные в Java.
Если вы не знакомы с функционалом Java, запишитесь на курс Skypro «Java-разработчик». Освоите релевантные навыки, составите портфолио и получите диплом установленного образца.
Extension functions
Extension functions позволяют расширять классы новыми методами. Это статически типизированные методы, которые можно вызывать как другие методы класса:
class ExtendMe { } fun ExtendMe.extension() { println("Extension function for ExtendMe class") } fun main(args: Array<String>) { val instance:ExtendMe = ExtendMe() instance.extension() }
Форматирование строк
Вот как выглядит форматирование строки средствами самого языка:
val number: Int = 10 val bit: Boolean = false println("number: $number, bit: $bit") println("calculated hash code: ${number.hashCode()}")
Корутины
Корутины — это неблокирующие функции, которые позволяют писать асинхронный код:
fun nonBlockingMethod() = runBlocking { launch { delay(1000L) println("this text will be printed later") } println("text to print first") }
Делегирование
Альтернатива наследованию, позволяет передавать ответственность за выполнение методов другому классу:
interface IBase { fun print() } class BaseImplementation() : IBase { override fun print() { println("BaseImplementation class") } } class Derived(baseInstance: IBase) : IBase by baseInstance fun main(args: Array<String>) { val instance: BaseImplementation = BaseImplementation() Derived(instance).print() }
Data-классы
Позволяют создавать классы, которые предназначены исключительно для хранения данных:
data class Storage(val type: String, val size: Int)
Перегрузка операторов
Операторы можно научить работать с классами:
class Number constructor(val value: Int) { operator fun plus(other: Int): Number { return Number(value + other) } override fun toString(): String { return this.value.toString() } } fun main(args: Array) { println("5 + 10 is ${Number(5) + 10}") }
Подборка обучающих материалов
У Kotlin подробная документация, которая поможет стартовать в изучении языка. Есть неофициальная версия на русском языке.
Компания Google подготовила материал по созданию приложений для Android. В нём — базовые примеры языка и детали, специфичные для Android.
А еще у Kotlin большое сообщество, которое собирает разные курсы и помогает в обучении.
Коротко о главном
Kotlin — отлично спроектированный язык программирования с большой аудиторией. Его популярность растет не только в устройствах на Android, но и в серверной разработке, вытесняя Java.
Программисты на Kotlin уже сейчас востребованы на рынке. Только на хедхантере больше 700 вакансий — и количество будет расти.
Добавить комментарий