Что такое Kotlin

Kotlin — это язык про­грам­ми­ро­ва­ния ком­па­нии JetBrains, кото­рый за 9 лет потес­нил Java и стал важ­ным инстру­мен­том андроид-разработчиков. Раз­бе­рём­ся, что осо­бен­но­го в Kotlin, какие у него рис­ки и с чего начать. 

🤔 Зачем понадобился ещё один язык вместо Java

На этот вопрос есть два отве­та. 

Офи­ци­аль­ный ответ: в 2017 году язы­ком Kotlin поль­зо­ва­лись око­ло мил­ли­о­на про­грам­ми­стов, и им не хва­та­ло под­держ­ки на Андро­и­де. Гугл пошёл навстре­чу раз­ра­бот­чи­кам и сде­лал Kotlin при­о­ри­тет­ным язы­ком на Андро­и­де. 

Догад­ки и слу­хи: с 2010 года Гугл судит­ся с ком­па­ни­ей Oracle по пово­ду исполь­зо­ва­ния Java в систе­ме Андро­ид. Вот поче­му: 

в осно­ве пер­вых вер­сий Андро­и­да лежа­ла вир­ту­аль­ная маши­на Dalvik, 

Dalvik постро­е­на на осно­ве плат­фор­мы Apache Harmony, 

Apache Harmony — это плат­фор­ма Java, на кото­рую у Гугл нет лицен­зии.

В 2010 году Oracle потре­бо­ва­ла от Гугл мил­ли­ард­ную ком­пен­са­цию и три­жды выиг­ры­ва­ла суд: в 2012, 2014 и 2015-м. Дело не закры­ва­лось, посколь­ку в Гугл отка­зы­ва­лись столь­ко пла­тить. В 2016 году иск вырос до девя­ти мил­ли­ар­дов, одна­ко суд встал на сто­ро­ну Гугл. Дело висит с 2017 года, а Гугл посте­пен­но пере­во­дит всю андроид-инфраструктуру с Java на Kotlin. 

✅ Преимущества 

Сов­ме­сти­мость с Java. Kotlin и Java мож­но исполь­зо­вать в одном про­ек­те. Для это­го у язы­ка Kotlin есть соб­ствен­ный ком­пи­ля­тор, кото­рый выда­ёт байт-код, сов­ме­сти­мый с обыч­ной Java-машиной. Полу­ча­ет­ся, что с точ­ки зре­ния Java неваж­но, из како­го язы­ка был сде­лан байт-код.

Упрощенная схема взаимодействия Java и Kotlin Упро­щен­ная схе­ма вза­и­мо­дей­ствия Java и Kotlin

Выра­зи­тель­ность. Kotlin — это ком­пакт­ный язык без кус­ков избы­точ­но­го кода: 

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

Без­опас­ность. Язык Kotlin и его сре­да про­грам­ми­ро­ва­ния — это про­дукт одной ком­па­нии, кото­рая посто­ян­но обнов­ля­ет базу оши­бок и помо­га­ет раз­ра­бот­чи­кам редак­ти­ро­вать код до момен­та испол­не­ния про­грам­мы. 

На эта­пе ком­пи­ля­ции в Kotlin сра­ба­ты­ва­ет null-защита: Kotlin авто­ма­ти­че­ски про­ве­ря­ет типы дан­ных, отсле­жи­ва­ет null-значения и предот­вра­ща­ет появ­ле­ние NullPointerException — рас­про­стра­нён­ной Java-уязвимости.

❌ Недостатки 

Низ­кая ско­рость. Чаще все­го раз­ра­бот­чи­ки жалу­ют­ся на непред­ска­зу­е­мую ско­рость ком­пи­ля­ции. По быст­ро­дей­ствию Kotlin усту­па­ет Java, посколь­ку в его осно­ве лежит вир­ту­аль­ная маши­на JVM — фун­да­мен­таль­ная про­грам­ма, выпу­щен­ная спе­ци­аль­но под язык Java, а не под Kotlin.

Дру­гие нюан­сы смот­ри­те в твит­те­ре Дани­и­ла Попо­ва — андроид-инженера Ави­то, кото­рый изу­ча­ет Kotlin на прак­ти­ке и рас­ска­зы­ва­ет о све­жих тех­ни­че­ских багах. 

👉 Исто­рия Дани­и­ла Попо­ва: про андроид-разработку, отказ от тим­лид­ства в Mail.ru Group и пере­ход в инже­не­ры Ави­то

Малень­кое сооб­ще­ство и един­ствен­ный вла­де­лец язы­ка. Kotlin всё ещё не такой попу­ляр­ный, как Java. При­чи­на в том, что Kotlin — это не про­дукт Гугл. Раз­ра­бот­чи­ки боят­ся, что через какое-то вре­мя Гугл отка­жет­ся от него, при­ду­ма­ет какую-то свою вер­сию язы­ка или поссо­рит­ся с JetBrains. 

Мало­чис­лен­ное сооб­ще­ство тор­мо­зит раз­ви­тие Kotlin: под него мед­лен­но выпус­ка­ют­ся новые биб­лио­те­ки и обнов­ле­ния, а для реше­ния тех­ни­че­ских про­блем нуж­но обра­щать­ся в баг-трекер — напи­сать в тех­под­держ­ку JetBrains, доба­вить свою про­бле­му в оче­редь задач, ждать и наде­ять­ся на её испол­не­ние. 

В сен­тяб­ре 2020 в баг-трекере Kotlin око­ло 40 000 задач, кото­рые закры­ва­ют­ся по мере кри­тич­но­сти. До неко­то­рых задач оче­редь дохо­дит через несколь­ко лет, но есть и те, что оста­ют­ся нере­шён­ны­ми — в таких усло­ви­ях раз­ра­бот­чи­ки вынуж­де­ны искать костыль­ные реше­ния или пере­хо­дить на дру­гой язык с раз­ви­тым сооб­ще­ством.

С 2002 года популярность Java постепенно снижается, однако по-прежнему на высоком уровне С 2002 года попу­ляр­ность Java посте­пен­но сни­жа­ет­ся, одна­ко по-прежнему на высо­ком уровне

Для чего используется 

Kotlin исполь­зу­ет­ся для созда­ния мобиль­ных при­ло­же­ний, веб-разработки, бэкен­да и муль­ти­плат­фор­мен­но­го про­грам­ми­ро­ва­ния: 

Для веб-разработки преду­смот­ре­на ком­пи­ля­ция с JavaScript и инстру­мен­ты для HTML и CSS-кода

Для бэкен­да преду­смот­ре­на ком­пи­ля­ция Java и Kotlin в одном про­ек­те. По отдель­но­сти Kotlin и Java сов­ме­сти­мы по умол­ча­нию. 

Для муль­ти­плат­фор­мен­но­го про­грам­ми­ро­ва­ния преду­смот­ре­ны тех­но­ло­гии раз­ра­бот­ки интер­фей­сов в React, созда­ния сер­вер­но­го HTTP API в Ktor и адап­ти­ро­ва­ния андроид-приложений под опе­ра­ци­он­ную систе­му iOS. 

Google, Netflix, Twitter, Uber, Netflix и дру­гие ком­па­нии пере­во­дят неко­то­рые свои про­дук­ты на Kotlin. Кей­сы есть на developer.android.com в раз­де­ле «Исто­рии раз­ра­бот­чи­ков». 

Андроид-приложения с оптимизированным Kotlin-кодом Андроид-приложения с опти­ми­зи­ро­ван­ным Kotlin-кодом. Источ­ник: developer.android.com

С чего начать 

Почи­тай­те у нас ста­тью про Java — это язык, на кото­ром напи­са­но мно­же­ство при­ло­же­ний, биб­лио­тек и фрейм­вор­ков. Пере­чис­лен­ное часто исполь­зу­ет­ся в мобиль­ной раз­ра­бот­ке и в обо­зри­мом буду­щем не будет пере­во­дить­ся на Kotlin. 

Ска­чай­те IntelliJ IDEA или Android Studio. Обе про­грам­мы — это сре­да раз­ра­бот­ки под язык Kotlin. IntelliJ IDEA боль­ше под­хо­дит для сай­тов и деск­топ­ных про­грамм, а Android Studio — для раз­ра­бот­ки мобиль­ных при­ло­же­ний под андро­ид. 

Уста­но­ви­те пла­гин EduTools — это спе­ци­аль­ный инстру­мент, раз­ра­бо­тан­ный для изу­че­ния язы­ка Kotlin. Есть в IntelliJ IDEA и Android Studio. Позна­комь­тесь с офи­ци­аль­ным руко­вод­ством по язы­ку Kotlin. Если воз­ник­нут слож­но­сти с пере­во­дом — посмот­ри­те неофи­ци­аль­ную рус­ско­языч­ную вер­сию.

Текст и код:
Алек­сандр Бабас­кин

Редак­тор:
Мак­сим Илья­хов

Кор­рек­тор:
Ира Михе­е­ва

Иллю­стра­тор:
Даня Бер­ков­ский

Вёрст­ка:
Маша Дро­но­ва

Достав­ка:
Олег Веш­кур­цев