Язык kotlin


О языке Kotlin для Java-программистов / Хабрахабр

Эта статья рассказывает о языке программирования Kotlin. Вы узнаете о причинах появления проекта, возможностях языка и посмотрите несколько примеров. Статья написана в первую очередь в расчете на то, что читающий знаком с языком программирования java, однако, знающие другой язык, тоже смогут получить представление о предмете. Статья носит поверхностный характер и не затрагивает вопросы связанные с компиляцией в javascript. На официальном сайте проекта вы можете найти полную документацию, я же постараюсь рассказать о языке вкратце.

О проекте

Не так давно компания JetBrains, занимающаяся созданием сред разработки, анонсировала свой новый продукт — язык программирования Kotlin. На компанию обрушилась волна критики: критикующие предлагали компании одуматься и доделать плагин для Scala, вместо того, чтобы разрабатывать свой язык. Разработчикам на Scala действительно очень не хватает хорошей среды разработки, но и проблемы разработчиков плагина можно понять: Scala, которая появилась на свет благодаря исследователям из Швейцарии, вобрала в себя многие инновационные научные концепции и подходы, что сделало создание хорошего инструмента для разработки крайне непростой задачей. На данный момент сегмент современных языков со статической типизацией для JVM невелик, поэтому решение о создании своего языка вместе со средой разработки к нему выглядит очень дальновидным. Даже если этот язык совсем не приживется в сообществе — JetBrains в первую очередь делает его для своих нужд. Эти нужды может понять любой java-программист: Java, как язык, развивается очень медленно, новые возможности в языке не появляются (функции первого порядка мы ждем уже не первый год), совместимость со старыми версиями языка делает невозможным появление многих полезных вещей и в ближайшем будущем (например, приличной параметризации типов). Для компании, разрабатывающей ПО язык программирования — основной рабочий инструмент, поэтому эффективность и простота языка — это показатели, от которых зависит не только простота разработки инструментов для него, но и затраты программиста на кодирование, т. е. насколько просто будет этот код сопровождать и разбираться в нем.

О языке

Язык статически типизирован. Но по сравнению с java, компилятор Kotlin добавляет в тип информацию о возможности ссылки содержать null, что ужесточает проверку типов и делает выполнение более безопасным:fun foo(text:String) { println(text.toLowerCase()) // NPE? Нет! } val str:String? = null // String? -- тип допускающий null-ы foo(str) // <- компилятор не пропустит такой вызов -- // тип str должен быть String, чтобы // передать его в foo

Несмотря на то, что такой подход может избавить программиста от ряда проблем связанных с NPE, для java-программиста поначалу это кажется излишним — приходится делать лишние проверки или преобразования. Но через некоторое время программирования на kotlin, возвращаясь на java, чувствуешь, что тебе не хватает этой информации о типе, задумываешься об использовании аннотаций Nullable/NotNull. С этим связаны и вопросы обратной совместимости с java — этой информации в байткоде java нет, но насколько мне известно, этот вопрос еще в процессе решения, а пока все приходящие из java типы — nullable.

Кстати, об обратной совместимости: Kotlin компилируется в байткод JVM (создатели языка тратят много сил на поддержку совместимости), что позволяет использовать его в одном проекте с java, а возможность взаимно использовать классы java и Kotlin делают совсем минимальным порог внедрения Kotlin в большой уже существующий java-проект. В этой связи важна возможность использовать множественные java-наработки, создавая проект целиком на kotlin. Например, мне почти не составило труда сделать небольшой проект на базе spring-webmvc.

Посмотрим фрагмент контроллера:

path(array("/notes/")) controller class NotesController { private autowired val notesService : NotesService? = null path(array("all")) fun all() = render("notes/notes") { addObject("notes", notesService!!.all) } //... }

Видны особенности использования аннотаций в Kotlin: выглядит местами не так аккуратно, как в java (касается это частных случаев, например, массива из одного элемента), зато аннотации могут быть использованы в качестве «самодельных» ключевых слов как autowired или controller (если задать алиас типу при импорте), а по возможностям аннотации приближаются к настоящим классам.

Надо заметить, что Spring не смог обернуть kotlin-классы для управления транзакциями — надеюсь, в будущем это будет возможно.

В языке есть поддержка first-class functions. Это значит, что функция — это встроенный в язык тип для которого есть специальный синтаксис. Функции можно создавать по месту, передавать в параметры другим функциям, хранить на них ссылки:

fun doSomething(thing:()->Unit) { // объявляем параметр типа функция // ()->Unit ничего не принимает и // ничего важного не возвращает thing() // вызываем } doSomething() { // а здесь на лету создаем функцию типа // ()->Unit и передаем её в функцию doShomething // если функция -- последний параметр, можно // вынести её за скобки вызова println("Hello world") }

Если добавить к этому extension-функции, позволяющие расширить уже существующий класс методом не нарушающим инкапсуляцию класса, но к которым можно обращаться как к методам этого класса, то мы получим довольно мощный механизм расширения достаточно бедных в плане удобств стандартных библиотек java. По традиции, добавим уже существующую в стандартной библиотеке возможность фильтрации списка:

fun <T> List<T>.filter(condition:(T)->Boolean):List<T> { val result = list<T>() for(item in this) { if(condition(item)) result.add(item) } return result } val someList = list(1, 2, 3, 4).filter { it > 2 } // someList==[3, 4]

Обратите внимание на то, что у переменных не указаны типы — компилятор Kotlin выводит их, если это возможно и не мешает понятности интерфейса. Вообще, язык сделан таким образом, чтобы максимально избавить человека за клавиатурой от набирания лишних знаков: короткий, но понятный синтаксис с минимум ключевых слов, отсутствие необходимости точек с запятой для разделения выражений, вывод типов, где это уместно, отсутствие ключевого слова new для создания класса — только необходимое.

Чтобы проиллюстрировать тему классов и краткости, посмотрим на следующий код:

// создание bean-классов становится // немногословным, поля можно объявить // прямо в объявлении конструктора class TimeLord(val name:String) // класс может вообще не иметь тела class TARDIS(val owner:TimeLord) fun main(args:Array<String>) { val doctor = TimeLord("Doctor") val tardis = TARDIS(doctor) println(tardis.owner.name) }

В нескольких строках мы смогли объявить два класса, создать два объекта и вывести имя владельца ТАРДИСа! Можно заметить, что класс объявляется с параметрами своего единственно возможного конструктора, которые одновременно являются и объявлением его свойств. Предельно коротко, но при этом информативно. Наверняка найдутся те, кто осудит невозможность объявить больше одного конструктора, но мне кажется, что в этом есть свой прагматизм — ведь несколько конструкторов в java или позволяют объявить параметры по-умолчанию, что Kotlin поддерживает на уровне языка, или преобразовать один тип к другому, с которым и будет это класс работать, а это уже можно спокойно отдать на откуп фабричному методу. Обратите своё внимание на объявление «переменных» и полей. Kotlin заставляет нас сделать выбор: val или var. Где val — объявляет неизменяемую final-ссылку, а var — переменную, чем помогает избежать повсеместного использования изменяемых ссылок.

Пример

Вот мы и добрались до места, где уже можно сделать что-то более интересное. На собеседованиях я часто даю задание реализовать дерево, сделать его обход и определить какое-то действие с элементом. Давайте посмотрим, как это реализуется в kotlin.

Так я бы хотел, чтобы выглядело использование:

fun main(args: Array<String>) { // создаем небольшое дерево val tree= tree("root") { node("1-1") { node("2-1") node("2-2") } node("1-2") { node("2-3") } } // обходим его и выводим значения в консоль tree.traverse { println(it) } }

Теперь попробуем это реализовать. Создадим класс узла дерева:

/** * @param value данные узла */ class Node<T>(val value:T) { // дети узла private val children:List<Node<T>> = arrayList() /** * Метод, который создает и добавляет ребенка узлу * @param value значение для нового узла * @param init функция инициализации нового узла, необязательный * параметр */ fun node(value:T, init:Node<T>.()->Unit = {}):Node<T> { val node = Node<T>(value) node.init() children.add(node) return node } /** * Метод рекурсивно обходит все дочерние узлы начиная с самого * узла, о каждом узле оповещается обработчик * @param handler функция обработчик для значения каждого узла */ fun traverse(handler:(T)->Unit) { handler(value) children.forEach { child -> child.traverse(handler) } } }

Теперь добавим функцию для создания вершины дерева:

/** * Создает вершину дерева со значением value и инициализирует * её детей методом init. */ fun <T> tree(value:T, init:Node<T>.()->Unit): Node<T> { val node = Node(value) // вызываем метод init, переданный в // параметр, на объекте ноды node.init() return node }

В двух местах кода была использована конструкция вида Node.()->Unit, её смысл в том, что на вход ожидается тип-функция, которая будет выполняться как метод объекта типа Node. Из тела этой функции есть доступ к другим методам этого объекта, таким как метод Node.node(), что позволяет сделать инициализацию дерева, подобную описанной в примере.

Вместо заключения

За счет хорошей совместимости с java и возможности заменять старый код постепенно, в будущем Kotlin мог бы стать хорошей заменой java в больших проектах и удобным инструментом для создания небольших проектов с перспективой их развития. Простота языка и его гибкость дает разработчику больше возможностей для написания быстрого, но качественного кода.

Если вас заинтересовал язык, всю информацию о языке можно найти на официальном сайте проекта, ихсодники на github-е, а найденные ошибки постить в Issue Tracker. Проблем пока много, но разработчики языка активно с ними борются. Сейчас команда работает над пока еще не очень стабильной версией milestone 3, после стабилизации, насколько мне известно, планируется использовать язык внутри компании JetBrains, после чего уже планируется выход первого релиза.

habrahabr.ru

Как петербуржцы создали язык программирования Kotlin и почему его теперь используют Android и Google. Интернет-газета «Бумага»

Язык программирования Kotlin, созданный петербургской компанией JetBrains, стал официальным языком для разработки на Android.

Почему Kotlin назвали в честь острова в Финском заливе, как и когда язык стал популярен среди разработчиков мобильных приложений, почему им удобно пользоваться и зачем он изначально понадобился? Маркетинг-менеджер Kotlin Роман Белов рассказал «Бумаге», как в Петербурге создавали язык, признанный Google.

Фото из архива Романа Белова

Мы начали разрабатывать Kotlin в 2010 году. К тому времени компании JetBrains было уже десять лет и основной продукт компании — JetBrains IntelliJ IDEA, полностью написанный на Java, — был уже очень большого размера. Стало понятно, что во многом Java нас не устраивает. Было несколько альтернативных языков программирования, но оказалось, что ни один из них не соответствует тем требованиям, которые мы выдвигаем к языку, на который хотели бы перейти.

Была и вторая причина. Когда в одном месте собирается очень много людей с большим экспертным опытом в области языков программирования, часто получается, что рождается новый язык. Так оно и получилось. Во-первых, была осознанная и серьезная потребность, а во-вторых, мы могли ее удовлетворить.

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

В тот момент, когда придумывалось название, на JVM (Java Virtual Machine — прим. «Бумаги») существовали еще языки, названные в честь островов: Java, Ceylon. И мы подумали: какой у нас есть остров рядом? Котлин. И это название прижилось. Тут нет какой-то традиции или правила, но так случилось, какой-то более глубокой мысли за этим нет.

Наверное, самое удачное слово, которое подходит к языку Kotlin, — это прагматичность. Языки бывают разные: некоторые выходят из академической среды, другие созданы для конкретных платформ. Мы изначально были нацелены на практичный язык для максимально широкой аудитории. Он должен был быть демократичным, то есть без заумных вещей. Бывают ситуации, когда программист знает все тонкости языка и благодаря этому пишет хитрый код, — и в этот код никто из джуниор-программистов не может лезть. Нам нужен язык, который одинаково хорош как для начинающих программистов, так и для продвинутых.

Внутри компании у нас также полная демократия: каждый программист сам решает, на каком языке писать, на Java или на Kotlin, и далеко не все переходят на Kotlin. Для меня как для маркетинг-менеджера языка JetBrains — это маленький мир. Когда в нашей большой компании все перейдут на Kotlin, тогда, наверное, и во всем мире программисты перейдут на него. Но, действительно, процент использования Kotlin в компании неизменно растет.

Чем же Kotlin так хорош? В первую очередь разработчики любят Kotlin за его краткость и выразительность. Это свойственно всем новым языкам. Раньше людей это не очень смущало, потом размер программ стал больше — люди поняли, что пишут очень много совершенно бессмысленных кусков кода только потому, что от них это требует синтаксис языка программирования.

Вторая причина в том, что он полностью совместим с Java и позволяет постепенно мигрировать с Java-приложения на Kotlin-приложение. Например, приложение Basecamp в течение полугода полностью мигрировало с Java на Kotlin.

Третий пункт — Kotlin безопасен: в семантику языка заложены принципы, которые предотвращают целый ряд очень распространенных ошибок, которые обычно случаются в момент исполнения программы. Это позволяет писать более безопасный код, что в конечном итоге помогает сэкономить деньги и снизить затраты на тестирование.

В JetBrains мы не занимаемся Android-разработкой и изначально никто не думал, что Kotlin будет языком, который так удачно подойдет для целей Android-разработчиков. Но в какой-то момент оказалось, что Android застрял на Java 6 и очень многие новые фичи Java на Android недоступны. Тогда прогрессивные разработчики обратили внимание на Kotlin.

Мы поняли, что Kotlin может быть очень полезен для Android, и стали дорабатывать фичи, которые помогают Android-разработчикам, учитывали их потребности при разработке дизайна языка.

Год назад у нас произошло довольно большое событие: система сборки Gradle, с помощью которой собираются все приложения для Android, объявила о переходе на Kotlin.

В каком-то смысле история с Kotlin на Android — совершенно сказочная и хрестоматийная: мы просто делали язык программирования, и он очень нравился разработчикам. Это история про движение снизу вверх, а не наоборот. Разработчики давно просили Google поддержать Kotlin. И Google к ним прислушался.

С анонсом от Google формально для нас ничего не меняется: мы продолжаем разрабатывать язык и нацелены на разные платформы. Естественно, мы предвкушаем особое внимание к языку со стороны Android-разработчиков: оно будет, в частности, выражено в сообщениях об ошибках, в запросах на поддержку той или иной функциональности, и, естественно, мы будем всё это обрабатывать. Но в целом, конечно, продолжим двигаться по намеченному пути.

В компании мы начали применять Kotlin года с 2012-го, но официальный релиз языка был 17 февраля 2016 года. До этого времени конструкции языка активно менялись и поддерживать код на Kotlin было достаточно проблематично. Надо понимать, что развитие языков программирования требует большого внимания к обратной совместимости. И когда мы заявили о релизе, взяли на себя обязательство по обратной совместимости: по тому, что новый код будет совместим на бинарном уровне со старым. И мы эти обязательства выполняем.

Сейчас язык Kotlin в своих приложениях используют такие российские компании, как Avito и «Рокет Банк». За прошлый год Kotlin опробовали 160 тысяч программистов. До сегодняшнего дня Kotlin показывал экспоненциальный рост по числу программистов, и, думаю, объявление Google поможет нам продолжить этот рост.

paperpaper.ru

Немного о Kotlin / Хабрахабр

На днях JetBrains после пятилетней работы выпустила первый релиз языка Kotlin. Давайте посмотрим, что же это за язык, попробуем разобраться зачем и для кого он, какие имеет функциональные особенности. Скорее всего в статью затесались и личные впечатления от языка, но я старался, чтобы они не влияли на изложение полезной информации. Если вы еще ничего или почти ничего не знаете о Kotlin, то я завидую вам, ибо по моему ощущению почитать про инструмент, который ты долго ждал, сродни распаковке новогоднего подарка. Впрочем судите сами.

Что такое Котлин
Котлин — это небольшой остров в Финском заливе недалеко от Санкт-Петербурга. Видимо, тем самым создатели дают отсылку к тому, что новый язык, как остров Котлин — младший русский брат далекого острова Ява.
Для кого этот язык
Действительно, новый язык компилируется в JVM байт-код (есть еще и компиляция в JavaScript, но так как релиз компилятора именно в JVM, эту тему придется опять отложить). А это значит, что он может заинтересовать всех, кто имеет дело с Java-машиной и в целом с языками со сборщиком мусора (а с выходом релиза компиляции в JavaScript покрытие и возможности будут еще шире).
Простой и совместимый
Две главных особенности котлина, на мой взгляд, это его простота и полная совместимость с Java. Котлин создавался компанией, которая делает очень много продуктов на Java и которая хорошо разбирается в современных инструментах разработки. Запрос на новый язык витает в воздухе давно, но сделать такой язык, который бы позволил взять (огромную) готовую кодовую базу Java, обычных Java-разработчиков, дать им новый инструмент и бесшовно (но более эффективно) продолжать разработку — такого инструмента до появления котлина не существовало. Создатели нового языка, на мой взгляд, очень хорошо почувствовали потребности бизнеса и разработчиков: бизнесу дали возможность увеличить эффективность разработчиков, а разработчикам дать современный инструмент для разработки. И когда я говорю о «современном инструменте», я, конечно, имею ввиду не только компилятор, но и поддержку в IDE, без которой лично моя деятельность разработчика мне видится совсем немыслимой. В итоге: простота позволяет использовать язык почти любому Java-разработчику, который готов потратить полчаса на то, чтобы посмотреть туториал или спецификацию языка, обратная совместимость же позволяет использовать язык в уже существующем проекте.
Production-ready
Конечно, в первую очередь, запрос на этот язык был у самой JetBrains, отсюда и некоторое понимание, каким он должен быть. Более того, JetBrains же внутри компании его и тестировала: к моменту выхода этого релиза у компании уже есть как минимум один крупный продукт сделанный чисто на котлине (да, я понимаю, что платформа по прежнему написана на Java). Отсюда можно предположить, что заявления о готовности языка к продакшену не голословны. А из своего же опыта использования котлина с 2012 года могу сказать, что из тех проблем, с которыми я сталкивался в дорелизные времена, до релиза ни одна не дожила. Есть еще небольшие проблемы с плагином для IDEA, но сам компилятор работает как часы.
Совместим с Java 1.6
Это очень важный момент, ведь именно эта версия Java используется во всех современных версиях Android, и, не смотря на запланированный переход на OpenJDK, восьмая версия попадет в руки разработчикам под мобильные устройства не так скоро как хотелось бы. Конечно, есть всякие ретролямбды и другие ухищрения, но котлин — это не только лямбды для андроид, но и современный язык, позволяющий сделать разработку под андроид проще и приятней без особых затрат. А увеличение размера apk совсем не значительно по нынешним временам: 823KB (для версии 1.0.0)
Особенности
Полный список возможностей, конечно, лучше искать в документации, я же постараюсь отразить наиболее важные на мой взгляд моменты в общих словах:
Null safety
Почему-то исторически так сложилось, что эта особенность котлина вспоминается первой. И хотя она безусловно важна, на мой взгляд не является важнейшей. Здесь язык позволяет, определяя переменные, поля, константы и тд, указать, может ли в них храниться ссылка на null. Поднимает на новый уровень идею аннотаций вроде @Nullable и NotNull, позволяет умно приводить к не-nullable типу после проверки её на null. Надо отметить, что бывают случаи, когда эта особенность расходится с моим закостенелым разработкой на Java представлением о том как должны быть сделаны некоторые вещи, но после некоторого раздумья хорошее решение всегда находится./* вопросом помечаем, что может прийти null */ fun someFunction(someNullableParam:SomeType?) { if(someNullableParam != null) { // smart cast. Компилятор видит, что передаваемое // значение не null и разрешает его передать в функцию anotherFunction(someNullableParam) } } /* здесь же уже null не пройдет, в попытке передать * null или nullable значение компилятор выдаст ошибку */ fun anotherFunction(someParam:SomeType) { // делаем что-то без опаски, что переданное значение null }
Выведение типов
Да, котлин почти везде где возможно, умеет вывести тип, однако тип всё же придется определить для публичных методов и свойств, что очень разумно (мне подсказывают, что это неправда — с какой-то версии это убрали):// Kotlin в курсе, что здесь List<Char> val result = sequenceOf(10).map { it.toString() }.flatMap { it.toCharArray().asSequence() }.toList()
Extension methods
Возможность, которой мне остро не хватает в Java для увеличения гибкости языка и решений. Заключается в возможности определить метод для типа отдельно от его (типа) объявления. Такая функция, конечно, не будет виртуальной и никак не меняет класса, которому мы добавляем метод, однако позволяет добавить как утилитарную функциональность для уже существующего кода, так и разгрузить интерфейс от этих же утилитарных методов.interface Vector2 { val x:Float // это не поле, а ридонли свойство (property) val y:Float // в Java были бы методы getX() и getY() } /* Extension property. Без поля в классе, просто getLength() */ val Vector2.length:Float get() = (x * x + y * y).sqrt() // притворимся, что такая extension-функция для Float уже существует /* переопределяем оператор + */ operator fun Vector2.plus(other:Vector2):Vector2 = createVector(x+this.x, y+this.y) // какой-то способ создать новый вектор /* без тела, после знака = пишем одно выражение */ fun Vector2.dot(x: Float, y: Float): Float = x * this.x + y * this.y /* Помечая функцию с одним параметром как infix, * мы позволяем вызывать её через пробел: v1 dot v2 */ infix fun Vector2.dot(vec2: Vector2): Float = dot(vec2.x, vec2.y) fun usage(vec1:Vector2, vec2:Vector2) { val dotProduct = vec1 dot vec2 val sum = vec1 + vec2 // на выходе новый вектор val length = sum.length // обращаемся просто как к свойству }
Лямбды
Конечно, как любой современный язык с претензией на возможности функцинального программирования, у котлина функция — это сущность первого класса, если переводить дословно. Т.е. функции можно не только объявлять прямо в пакете (из джавы они видны всё равно в классах — по имени файла), но и передавать в качестве параметров, возвращать из других функций и тд. И сейчас, конечно, никого этим не удивишь, но например в сравнении с Java, где синтаксически функций как таковых нет (а только функциональные интерфейсы), в котлине полноценный синтаксис для объявления функции:/* передаем в одну функцию другую -- принимает в параметр Int * и Int же возвращает. Возвращаем её же, только с фиксированным * значением в качестве параметра */ fun passTen(func: (Int)->Int ): ()->Int { return { func(10) } }
Extension-лямбды
Наряду с extension-методами, это еще одна моя любимая фича. Позволяет определить лямбду, которая будет еще и extension-методом. Звучит не очень, да. Посмотрим на примере:class World(val name:String = "world") val printName:World.()->Unit = { // интерполяцией в синтаксисе языка сейчас уже // никого не привлечь на темную сторону println("Hello $name") } val world = World() // вызываем нашу функцию как будто это метод нашего класса! world.printName()

Эта возможность особенно интересно смотрится в билдерах, посмотреть на которые я предлагаю вам самостоятельно — на случай, если вам интересно, как получаются вот такие конструкции:

html { head { title {+"XML encoding with Kotlin"} } body { h2 {+"XML encoding with Kotlin"} a(href = "http://kotlinlang.org") {+"Kotlin"} } }
Inline-фукнции
Помечая функцию как inline мы просим компилятор поместить её по месту использования. Чаще всего такими вещами занимается рантайм, но есть кейзы, когда мы точно знаем, что фукнция это просто шорткат для какого-то действия — особенно эффективно это работает с передаваемыми лямбдами:/* передаваемой лямбдой block сейчас уже никого не удивишь. * Главно, что лишних затрат на вызов этой функции не будет вообще, * иногда мне кажется, что это что-то вроде макросов */ inline fun lock(lock:Lock, block:()->Unit) { lock.lock() try { block() } finally { lock.unlock() } } fun usage() { lock(Lock()) { // делаем что-то внутри блокировки } }

Конечно, на такие функции накладывается серия ограничений, подробнее см. документацию.

Делегирование
В котлине есть два типа делегирования. Первый, который позволяет делегировать все методы реализуемого интерфейса к какому-то инстансу этого типа:interface Connection { fun connect() } /* здесь мы видим стандартный для котлина синтаксис определения * класса вместе с параметрами конструктора и свойствами -- * в данном случае connection будет и в конструкторе и в поле. * Есть возможность определить и множественный конструктор * см https://kotlinlang.org/docs/reference/classes.html#constructors * И, наконец, мы видим что класс реализует интерфейс Connection, все методы * которого делегируются к переданному в конструктор экземпляру Connection-а. * При желании их конечно можно переопределить в теле класса */ class ConnectionWrapper(val connection:Connection) : Connection by connection

У этого синтаксиса есть ряд ограничений. Например, инстанс для делегирования должен быть известен до вызова конструктора.

Второй тип делегирования — это delegated properties. Позволяет определить объект с методами get (и set для var), к которым будет осуществляться делегирование доступа при обращении к свойству объекта.

class Foo { /* это делегат из стандартной библиотеки, позволяет отложить инициализацию поля до первого обращения к нему */ private val someProeprty by lazy { HavyType() } }
Generics
Создатели котлина несколько улучшили Java-дженерики. Из-за совместимости с джавой не всё получилось как хотелось бы, но им удалось исправить много неприятных моментов, которые не учли их предшественники при работе над Java 5.
Деструктуризация
val (first, second) = someFunc() Чтобы такой код заработал, возвращаемое значение из someFunc() должно быть типа, у которого есть (можно extension) методы component1(), component2():class Foo { fun component1():String = "test" fun component2():Int = 10 } fun someFunc():Foo = Foo() // или так, to -- в это такой infix extension-метод определенный // для Any, который создает экземпляр класса Pair, метод hashMapOf // в свою очередь принимает vararg параметр таких пар val map = hashMapOf(1 to "test") for ((id, name) in map) { // такой синтаксис возможен, потому что для Map-а определен метод iterator() // возвращающий набор Map.Entry, а для него в свою очередь определены два // extension-метода component1() и component2() }
Data-классы
Сахар компилятора для создания бинов:data class Bean(val a:String, val b:Int) Создает бин с полями + автогенерирует equals+hashCode+toString()+componentN из раздела выше, что позволяет писать такой код:fun someFunc():Bean = Bean("test", 10) val (a, b) = someFunc() Полезная вещь, но о нюансах см. пункт «О грустном».
Стандартная библиотека
Конечно, нельзя не упомянуть и стандартную библиотеку. Так как котлин нацелен в первую очередь на работу вместе с Java, то и целиком своей стандартной библиотеки у него нет. Большая часть стандартной библиотеки Kotlin нацелена на улучшение и исправление библиотеки старшего брата — Java. Однако, это тема для другой большой статьи.
О грустном
Вы могли подумать, что это идеальный продукт, но нет, есть и неприятные моменты:
IDE
Над плагином еще работать и работать, периодически выдает эксепшены, плохо умеет в toString() в дебаге, а так же любит промахиваться по ссылке на исходник, иногда (видимо из за особенностей инлайна) путает где поставлен брэкпоинт и тому подобные проблемы. Это всё конечно со временем наверняка поправят, но сейчас мы имеем именно это.
Data-классы
Надо признать, что идея была хорошая, но в данный момент есть масса ограничений , наложенных на этот тип классов, что позволяет их использовать в сильно более ограниченном числе кейзов, нежели хотелось бы. Создатели языка обещают поработать над решением этой проблемы, но пока так.
Некоторая неряшливость
Конечно, неряшливость в первую очередь в головах, но краткость синтаксиса иногда играет злую шутку, и местами код выглядит неважно. Возможно, наличие стайл-гайда несколько эту проблему исправило бы, но пока иногда приходится постараться, чтобы не только хорошо работало, но и красиво выглядело. Особенно на мой субъективный взгляд страшно выглядят get, set для свойств.
В заключение
Одной статьёй невозможно охватить все особенности и аспекты языка, но я и не пытался. Моей задачей было познакомить с языком, может быть обратить на него внимание. Тот, кто заинтересовался, сможет найти больше в документации, посмотреть исходники, попробовать, задать вопрос. Сложно предсказать популярность этого языка, но уже сейчас видно, что такого продукта многие ждали, проекты на котлине появляются как грибы, а после релиза частота их появления увеличится еще. По моему впечатлению, языка хорошо сбалансирован и продуман — во время написания кода, складывается ощущение, что всё на своем месте. Если вы используете jvm или любой другой язык со сборкой мусора, есть смысл обратить внимание на котлин. Лично для меня, котлин — это тот инструмент, которого я долго ждал и теперь не представляю, как мог бы обходиться без него.

habrahabr.ru

Хочу всё знать. Язык Kotlin | GeekBrains

По-настоящему интересный Java-заменитель.

 

В 2010 году группа разработчиков российского отделения JetBrains взялась за разработку языка, который был бы удобнее и типобезопаснее, чем Java, но не так сложен, как Scala. Название этому языку было дано в честь острова Котлин, расположенного в Финском заливе (по аналогии с Java, который также назван в честь острова).

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

Синтаксис

Идея сделать язык, одинаково удобный, как для новичков, так и для опытных разработчиков напрямую выразилась в его синтаксисе. Как и любой современный аналог, Kotlin — предельно лаконичный, компактный и понятный. Огромное количество кода, которое приходилось раньше писать на Java теперь можно просто проигнорировать. Простой пример: использование точки с запятой для разделения операторов не является обязательным условием — компилятор теперь всё понимает самостоятельно, если просто перейти на новую строку. При объявлении переменных во многих случаях не обязательно указывать тип — он определится автоматически.

При этом надо сказать, что Kotlin в плане записи немного вернулся к стилю Pascal — здесь тоже наглядность главенствует над чёткостью конструкций. Немного подробнее об этом можно почитать в этой небольшой статье. В ней рассмотрены лишь базовые принципы построения языков  Java и Kotlin, поэтому понятна она будет абсолютно всем.

Впрочем, небольшой кусочек кода всё же оставим:

fun main(args : Array<String>) {  val scope = "world"  println("Hello, $scope!") }

Предельно простая запись, которая должна быть понятна любому, кто хотя бы год в школе или университете учил программирование.

Важно упомянуть, что Kotlin полностью совместим с Java. Именно поэтому на первых порах его рассматривали как простой синтаксический сахар, используя для комплексных задач, где просто хотелось сэкономить время и силы.

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

В общем-то все преимущества в сравнении с Java уже были названы, поэтому просто соберем их в одном месте:

  1. Объем кода. Неиспользование ненужных архаичных кусков кода ускоряет процесс разработки и повышает читаемость;

  2. Безопасность. Заложенные в синтаксис языка правила создания кода позволяют избегать мелких трудно отслеживаемых ошибок, которые возникают лишь в момент исполнения программы;

  3. Совместимость в Java. Это удобно и с точки зрения обучения новому языку, и с точки зрения постепенного перевода ваших программных продуктов c Java на Kotlin. К примеру, именно так произошло с приложением Basecamp.

Недостатки

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

Kotlin же пока со своими главными задачами справляется, а полная совместимость с Java помогает закрыть глаза на указанные пробелы.

Перспективы

Несмотря на то, что разработка Kotlin началась в 2010 году, первая официальная версия увидела свет лишь в феврале 2016. С этого момента востребованность языка стремительно растет, в рейтинге TIOBE он за год ворвался в TOP-50, а в прошлом месяце на конференции Google I/O было объявлено об официальной поддержке Kotlin в системе разработки Android-приложений.

Учитывая высокую популярность IntelliJ IDEA среди разработчиков и стратегическую ставку компании на Kotlin, можно с уверенностью утверждать, что через 3-4 года мы увидим его среди полноправных конкурентов Java и Swift в области мобильной разработки. Кроме того, если создатели языка не разочаруются в своем продукте, наверняка Kotlin отправится всерьез захватывать и другие горизонты: веб, ИИ, интернет вещей, большие данные, десктопные приложения.

Если вас всерьёз заинтересовал этот язык, то обязательно загляните на его официальный сайт (русская версия) и испытайте все его преимущества на личном опыте. Спешите, пока это не стало мейнстримом.

geekbrains.ru

За что Kotlin так полюбили в Google и кому нужны две тысячи языков программирования

Язык программирования Kotlin, разработанный петербургской компанией JetBrains, стал официальным языком разработок для Android. Об этом официально объявили на конференции Google I/O. Командой Kotlin руководит выпускник Университета ИТМО Андрей Бреслав. Почему именно Kotlin так полюбился IT-гиганту среди многих других «молодых» языков, как и зачем вообще появляются новые языки программирования, читайте в комментариях экспертов и информационной подборке ITMO.NEWS.

Как разрабатываются языки программирования

По разных подсчетам, в мире уже более двух тысяч разных языков программирования. Для старых языков постоянно выходят обновления, а также появляются новые языки. Когда синтаксис языка не меняется, а лишь усложняется и дополняется, разработчику достаточно немного потренироваться, чтобы продолжать писать на любимом языке. Иногда же меняется сама структура языка, и тогда программисту подчас приходится переучиваться, адаптируясь к обновленному языку. Обычно переход на новую структуру идет постепенно и частями, то есть только 10-20% программного кода начинает писаться с помощью нового языка.

«Программисты не были абсолютно довольны языками С++ и Java, потому что это достаточно сложные языки, при этом первый сложнее, чем второй. Поэтому появился язык Scala, который нравится многим программистам, но и он весьма сложен. Огромный опыт компании JetBrains в создании средств разработки программ для разных языков программирования позволил за семь лет создать язык Kotlin, который полностью совместим с Java, но проще и удобнее его. Языки программирования разрабатываются постоянно, задачу сделать универсальный язык уже никто перед собой не ставит. Несмотря на это, каждый язык более эффективен в определенной области, где его чаще всего и используют. Есть даже такое направление в создании языков, когда они разрабатываются под конкретную предметную область», – прокомментировал заведующий кафедрой технологии программирования Университета ИТМО Анатолий Шалыто.

Анатолий Шалыто

Сегодня некоторые компании даже составляют свои рейтинги языков. Например, компания TIOBE, которая специализируется в оценке качества программного обеспечения, ежемесячно вычисляет индекс популярности тех или иных языков с 2001 года. В генерируемом списке 50 строчек, и чтобы язык программирования попал в индекс, разработчики должны написать соответствующее письмо в компанию. Подсчет ведется на основе данных 25 поисковых Интернет-систем. Пока в рейтинге с большим отрывом лидирует Java, за ней идет С. При этом составители списка подчеркивают, что за последний год оба языка программирования стали менее популярными, примерно на 6%. При этом TIOBE показывает, что язык С был языком №1 вплоть до 2002 года, а Java в 1997 году была на 14 месте, но уже через пять лет заменил С на первой позиции.

Отличную лекцию по истории развития языков можно послушать здесь: о том, как появились языки С, PHP, Ruby и Java рассказывает куратор академических программ «Яндекса», директор центра студенческих олимпиад факультета компьютерных наук ВШЭ Михаил Густокашин. Лектор подчеркивает, что для каждой задачи следует выбирать разный язык программирования. Например, он говорит, что для военной промышленности лучше всего писать на старом-добром Pascal – языке, который родился еще в 1970 году! Почему? Потому что он надежней. Приложения для бизнеса можно писать на Java, потому что этот язык тоже достаточно надежен, но гораздо более прост в использовании. Эксперт также подчеркивает, что важно поддерживать интерес к языку среди программистов с помощью создания сообщества разработчиков, которые пишут на этом языке. Если вокруг какого-нибудь нового языка создается инфраструктура, собираются люди, которые им пользуются, только тогда язык станет популярным. Кстати, разработчики Kotlin тоже взяли на вооружение эту стратегию.

Немного о  Kotlin

Язык программирования Kotlin начал разрабатываться в петербургской компании JetBrains в 2010 году. Официальный релиз продукта был выпущен в 2016 году. Такое название язык получил в честь острова в Финском заливе, на котором расположен Кронштадт. По интересному совпадению, название популярного языка Java – это тоже имя острова в Индонезии. Вероятно, совпадение не случайно. Как сообщается в пресс-релизе, Kotlin должен работать везде, где работает Java, и один из ориентиров был сделать такой продукт, который можно будет использовать в смешанных проектах, которые создаются на нескольких языках.

Язык программирования Kotlin. Источник: cdn-business.discourse.org

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

«Инструменты разработки, включая языки программирования, постоянно развиваются. Языки отличаются от других инструментов тем, что их довольно сложно развивать эволюционно. Новая версия языка должна поддерживать все уже существующие программы. Это ограничивает возможности развития существующих языков и создает потребность в появлении новых. Фактор, который определяет успешность нового языка программирования, это, в первую очередь, удобство для разработчиков. Кроме краткости и выразительности, Kotlin хорошо совместим с кодом на Java: можно использовать все существующие библиотеки и даже смешивать код на двух языках в одном проекте, поэтому не возникает особенных сложностей с переходом», – прокомментировал Андрей Бреслав, руководитель проекта Kotlin в JetBrains, выпускник Университета ИТМО.

Почему Google полюбил Kotlin

На официальном сайте разработчики Android пишут, что они наблюдали «восхождение» Kotlin все последние годы. «Гуглеры» не стесняются описывать этот язык как впечатляющий и лаконичный, который отрывает больше возможностей и с которым приятно работать. Он обладает повышенной производительностью: программный код на нем получается в среднем на 40% короче, чем на других языках, а также Kotlin позволяет не допускать некоторые ошибки в коде. Одним из определяющих факторов популярности Kotlin в Google стало то, что он совместим с Java, который уже используется при разработке приложений под Android.

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

«Отсутствие гарантий поддержки языка со стороны Google отпугивало многих разработчиков от перехода на Kotlin. Даже если язык очень нравится,  программист всегда думает о риске, что в какой-то момент этот язык просто перестанет работать. Теперь есть гарантия того, что работать Kotlin не перестанет, и мы ожидаем, что количество пользователей языка резко возрастет. Было бы естественно предположить, что многие компании со временем перейдут на Kotlin полностью, хотя технически их к этому ничего не вынуждает, это просто вопрос предпочтений», – подчеркнул Андрей Бреслав.

Он добавил, что Kotlin очень активно развивается. Команда разработчиков сейчас работает над билд-системой, скоростью компиляции, улучшает производительность IDE, добавляет в инструментарий новые возможности, в том числе связанные с интеграцией в Android Studio. Также идет работа над мультиплатформенными проектами (возможность компилировать один и тот же код под несколько платформ), целый ряд языковых улучшений находится в стадии дизайна.

Андрей Бреслав

В Google также подчеркнули, что их вдохновляет концепт языка Kotlin, по которому он всегда был и останется бесплатным для разработчиков, то есть open source project. Это значит, что язык не привязан к какой-либо отдельной компании, а исходный код распространяется под свободной лицензией. Загрузить продукт можно здесь. Чтобы поддерживать развитие Kotlin, компаниями Google и JetBrains будет создано некоммерческое партнерство. Также в рамках «миссии» Android очень важно, что авторы Kotlin создают вокруг своего продукта сообщество людей, которые профессионально занимаются разработкой на этом языке и любят делиться опытом. Например, в ноябре в США состоится конференция Kotlin, также разработчики могут получать ежедневные новости и советы о программном продукте, встречаться на местном уровне.

Кстати, сам проект Android Studio был разработан на базе программной среды разработки IntelliJ IDEA, которую также создали в компании JetBrains. Но несмотря на тесной сотрудничество, в петербургской компании подчеркивают, что ни о какой продаже JetBrains американскому IT-гиганту речи не идет. При этом Koltin не будет заточен только под Android. Цель компании – сделать язык программирования подходящим под разные платформы разработки.

news.ifmo.ru

20 отличных ресурсов для изучения Kotlin

Данная подборка материалов связана с изучением нового, и теперь уже официального языка Android-разработки Kotlin. Изучив данную подборку, возможно, вам захочется узнать о Kotlin больше!

Kotlin – это современный язык программирования, работающий на виртуальной машине Java (JVM). Данный язык имеет простой для восприятия синтаксис и поддержку всех существующих Java-библиотек. В 2017 году на конференции Google I/O Android-сообщество анонсировало, что Kotlin станет официальным языком программирования для данной платформы. Данный факт может сделать Kotlin одним из наиболее популярных языков будущего.

Мы специально подобрали список наиболее полезных, на наш взгляд, ресурсов для изучения Kotlin, доступные на данный момент, для того, чтобы облегчить вам знакомства с Kotlin.  Отметим, что в данный список не попал не один ресурс, и не одна книга за которую вам пришлось бы платить, все ресурсы из данного списка абсолютно бесплатные.

 

 

 

 

 

Официальный сайт данного проекта – это отличное место для того, чтобы начать изучение Kotlin. В разделе Ссылки вы сможете найти подробную документацию, которая охватывает все основные фичи и концепты данного языка. Раздел туториалы содержит различные практические пошаговые гайды о том, как настроить рабочую среду и, как работать с компилятором.

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

Данная подборка, состоящая из 11 туториалов, от Android-разработчика Juan Ignacio Saravia. В данных туториалах он задействует Kotlin для создания клона приложения Reddit. Туториалы охватывают огромное число разделов, начиная от настройки рабочего пространства для работы с API и заканчивая unit-тестами. Код данного проекта доступен на его GitHub репозитории.

Блог Android-разработчика Антонио Лейвы посвящён всему что связано с Kotlin. За счет еженедельного обновления своего блога туториаламии и статьями высокого уровня, читая которые даже ведущий разработчик Kotlin может найти для себя что-то новое, например: новые библиотеки или какие-то новые методы для построения приложений.

Официальный блог компании Google разместил пост, в котором подробно объясняются причины данного анонса и почему Kotlin заслуживает место в экосистеме Android. В статье рассказывается об улучшениях в ситанксисе, которые привнес Kotlin.

Dariusz Baciński создал репозиторий на GitHub, содержащий общие паттерны проектирования, реализованные на Kotlin. Здесь вы также можете найти похожие проекты, написанные на нескольких языках включая такие языки, как: Java, Swift, JavaScript и PHP. Поэтому если у вас за плечами есть один из данных языков программирования, то вы можете использовать его как отправную точку.

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

Официальный блог об языке программирования Kotlin, от авторов компании JetBrains. Здесь вы найдете все актуальные новости и обновления, связанные с Kotlin. Также вы найдете различные туториалы, советы и статьи связанные с данным языком программирования.

Полезная статья из блога разработчиков Google в которой объясняется, как установить и настроить Android Studio для работы с Kotlin, как конвертировать файлы с расширением .java в файлы с расширением .kt и о том, как импортировать данный язык в уже существующий проект. Также здесь приведено сравнение фрагментов кода на Java и Kotlin использующих одинаковое Android API.

Отличная статья, в которой показано как писать и запускать тесты на Adroid-приложениях с использованием Kotlin. Автор проделал превосходную работу, объясняя различия между разными типами доступных тестов, когда их использовать, и как быть уверенным, что вы проводите правильное тестирование. Другие хорошие туториалы по данной тематике вы можете найти здесь.

 

 

 

 

 

Лекция с презентации Google I/O 2017, посвященная введению в Kotlin для людей, которые впервые с ним сталкиваются. Лекция дает понимание того, как это может улучшить их рабочий процесс. Охватывается практически вся база данного языка и демонстрируются некоторые крутые возможности.

Вторая лекция о Kotlin с презентации Google I/O 2017. Данная лекция охватывает более сложные темы такие, как: паттерны проектирования, лучшие практики и другие более общие принципы. Также проливается свет на то, что такое использовать Kotlin для продакшена и с какими трудностями можно столкнуться при его адаптации под рабочее место.

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

Данная лекция с конференции GOTO 2016 состоит из небольших обзоров функциональных возможностей языка, рассматриваемых на реальных примерах, в которых вы изучите как Kotlin взаимодействует с существующими инструментами, стандартного рабочего пространства Android.

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

Введение в Kotlin, которое объясняет, как новый язык может улучшить экосистему Android и показывает нам несколько крутых способов, как можно используя продвинутый Kotlin достичь положительного результата.

 

 

 

 

 

Полезная шпаргалка, содержащая небольшие фрагменты кода, которые помогут вам быстро рассмотреть альтернативу общим Java операторам, функциям и объявлениям, реализованных на Kotlin.

Данный плагин для IntelliJ IDE позволит вам использовать редактор для работы с Kotlin (koans курс) в офлайн режиме.

Kotlin уже на протяжении 5 лет имеет открытый исходный код и данный GitHub-репозиторий содержит всю историю данного проекта. Если вы хотите поддержать язык, то у вас есть несколько способов для того чтобы сделать это. Вы можете помогать напрямую или работая над документацией.

Данный проект предоставляет возможность очень быстро настроить свое рабочее пространство для Kotlin и быстро произвести загрузку начальных приложений.

Довольно обширный список ресурсов, посвященных Kotlin, которые содержат все возможные полезные ссылки, книги, библиотеки, фреймворки и видеоуроки. Данный список хорошо структурирован, при помощи стилизированной версии, которая также доступна на kotlin.link.

Ссылка на оригинальную статьюПеревод: Александр Давыдов

 

 

proglib.io

Kotlin

Статья проплачена кошками - всемирно известными производителями котят.

Если статья вам понравилась, то можете поддержать проект.

Любой кот линяет. Из выпавшей шерсти можно собрать второго кота. По такой же аналогии из Java можно создать новый язык Kotlin, образованный из двух слов Kot linяет. Есть ещё неправдоподобная версия об острове в Финском заливе, которая просто смешна и не заслуживает внимания.

17 мая 2017 года на Google IO объявили о поддержке Kotlin в Android Studio 3.0. Пора учить новый язык, который заслужил много лестных отзывов от опытных разработчиков.

Базовые принципы

Исходный код хранится в файлах с расширением .kt (почему не .kot?).

В языке используется "кошачий принцип" - чем меньше печатаешь код, тем больше времени останется на сон.

Например, необязательно ставить точку с запятой в конце выражения. Так поступает JavaScript и многие новые языки программирования.

// и так сойдёт val x = 1 val y = 2

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

Массивы являются классами.

Можно сразу вызывать println вместо длинного System.out.println. Стандартная библиотека Kotlin включает в себя популярные методы Java для быстрого доступа.

Объявление переменных

В Java мы сначала указываем тип переменной, а потом её имя. В Kotlin немного не так. Сначала вы указываете ключевое слово val или var, затем имя переменной и по желанию можете указать тип переменной.

val kitty = "Васька" val age = 7 // необязательно, но укажем тип val weight: Int = 3 val actionBar = supportActionBar // объект ActionBar в активности

Если вы не инициализируете переменную, то тип указать нужно обязательно.

val age: Int age = 7

Иногда тип указывать обязательно.

val a: Any = 12 val context: Context = activity

Ключевое слово val (от слова value) ссылается на неизменяемую переменную, что соответствует ключевому слову final в Java.

/ Java final String name = "Васька"; // Kotlin val name = "Васька"

А часто используемое выражение в Java можно заменить на конструкцию с ключевым словом const

// Java public static final String CAT_TALK = "meow"; // Kotlin const val CAT_TALK = "meow"

Для обычных изменяемых переменных используется ключевое слово var (от слова variable).

Рекомендуется всегда использовать val, если это позволяет логика программы.

При этом нужно помнить, что хотя ссылка val неизменяема, сам объект может быть изменяемым:

val cats = arrayListOf("Васька") cats.add("Барсик")

При использовании var вы можете не указывать тип переменной, но это не значит, что вы можете использовать его не по назначению, это вам не PHP.

var answer = 42 // так нельзя answer = "нет ответа"

Защита от null

В Java существует проблема с исключением NullPointerException и разработчику нужно постоянно устраивать проверки на null. В Kotlin существует защита от подобных ошибок.

// Не скомпилируется. Кот не может быть null var notNullCat: Cat = null // Кот может быть null var cat: Cat? = null // Не скомпилируется, кот может быть null и мы должны учитывать это cat.print() // Можем печатать, если cat != null cat?.print() // Умное приведение. Если мы проводили проверку if, то можно вызывать обычным способом // checked nullity if (cat != null) { cat.print() } // Если уверены, что объект не null. Иначе выбросит исключение cat!!.print() // Используйте элвис-оператор, чтобы дать альтернативное значение, если объект равен null val name = cat?.name ?: "empty"

Продолжить изучение Kotlin

Базовые типы

fun

enum

when

for

in

Классы

Data Classes

Интерфейсы

Коллекции

Работа со строками

Лямбды

Сконвертировать существующий Java-код на Kotlin можно через меню Code | Convert Java File to Kotlin File.

Также в студии есть целый раздел меню для настройки: Tools | Kotlin.

Реклама

developer.alexanderklimov.ru


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