class: center middle kotlin-bg # .title[Петербургски язык программирования] --- class: center, middle ratio: 16:9 # Kotlin 101 ### Залим Башоров .twi[[@bashorov](https://twitter.com/bashorov)]
.link-to-slides[ Временная ссылка на слайды: [zal.im/s](http://zal.im/slides/piterjs20) ] ??? Я вам расскажу про Котлин и о том как использовать его для разработки фронтенда *** кто слышал про котлин? кто программировал? кто слышал Kotlin JS кто использовал Kotlin JS? кто знаком с ES 2015? кто знаком с TS? --- class: center middle .my-avatar[] .about-me-kotlin[] .about-me-jetbrains-min[] ### Залим Башоров zalim.bashorov@jetbrains.com .twi[[@bashorov](https://twitter.com/bashorov)] ??? Я работаю в команде Kotlin в компании JetBrains. Разработываю Котлин на Котлине уже почти 5 лет. Руковожу направлением Kotlin JS. --- # Kotlin -- - Статически типизированный -- - Современный -- - Прагматичный ??? 0 *** Выразительный Безопасный Гибкий - modern -- concise -- safe --- billion dollar mistake ---- compile time error instead of runtime -- expressive - progmatic -- tooling --- IDE (completion, navigation, refactorings, inspections) -- interop TIOBE? --- # Kotlin targets -- - Java byte code ??? Котлин может компилироваться в Java byte code и запускаться на JVM, будь это сервер, или андроид устройство -- - Официальный язык разработки для Android -- - JavaScript ??? может компилироваться в JavaScript и соответственно запускаться везде где есть JavaScript -- - Native ??? также, с недавних пор, котлин компилируется в нативный код и программа написанная на котлине может быть запущена независимо от наличия виртуальной машины *** raspberry pi, ios? --- # Kotlin JS -- Генерируемый код * совместим с ECMAScript 5.1 ??? Сейчас компилятор Kotlinа умеет генерировать код только для ECMAScript 5.1, Это позволяет запускать скомпилированный код на большом спектре браузеров / устройств -- * поддержка более поздних версий ECMAScript запланирована ??? Мы плнируем в будущем поддержат более поздние версии ECMAScript -- * всегда содержит "use strict" ??? Генерируемый код совместим со "strict mode" И всегда содежит "use strict" Данная директива включает дполонительные ограничения на код который выполняется в JS VM. Что во-первых делает код безопаснее, а во-вторых может помочь VM лучше оптимизировать код. -- * быстрый ??? Мы очень стараемся пораждать код который хорошо оптимизируетсяся современными JS VM -- * читаемый (на сколько это возможно) ??? Так же, мы стараемся не обделять вниманием и читаемость получаемого кода, но к сожалению, этот пункт страдает чаще остальных. В основном это связано с различием в семантике языков. Например, в котлине можно перегружать функции, т.е. иметь несколько функций с одним и тем же названием, а в JS такого нет. Эту проблему можно решить по разному. Например, можно эмулировать это поведение проверяя тип аргументов на рантайме, как часто делают в JS. А можно генерировать индивидуальное имя для каждой функции. У каждого метода есть свои плюсы и минусы. Мы выбрали второй потому что он быстрее и надежнее. -- * есть поддержка SourceMaps ??? Есть поддержка SourceMaps. Это означает что можно взять любой JavaScript дебагер, поддерживающий sourcemaps, и дебажить вашу программу прямо по котлиновским сорцам и не важно что там на самом деле сгенерилось. --- class: center, middle # Let's kode! --- # Полезные ссылки * Сайт Kotlin: [kotlinlang.org](https://kotlinlang.org) * документация: [kotlinlang.org/docs/reference/](http://kotlinlang.org/docs/reference/) * Try Kotlin: [try.kotl.in](https://try.kotlinlang.org) * Kotlin Koans: [try.kotl.in/koans](http://try.kotlinlang.org/koans) * Slack: [kotlinlang.slack.com](https://kotlinlang.slack.com) * регистрация [slack.kotl.in](http://slack.kotl.in) * канал про Kotlin JS: [#javascript](https://kotlinlang.slack.com/messages/C0B8L3U69/) ??? Набор полезных ссылок, в конце будет ссылка на слайды С вопросами и предложениями приходите к нам в Slack, в канал #javascript --- class: center middle # Спасибо! --- class: center middle ### Залим Башоров Kotlin ([kotl.in](https://kotlinlang.org)) zalim.bashorov@jetbrains.com .twi[[@bashorov](https://twitter.com/bashorov)] .link-to-slides[ Ссылка на слайды: [zal.im/slides/piterjs20](http://zal.im/slides/piterjs20) ] .link-to-slides[ Временная ссылка на слайды: [zal.im/s](http://zal.im/slides/piterjs20) ] ??? kotlinx.html kotlin-wrappers https://github.com/JetBrains/kotlin-wrappers kotlinx.coroutines