Найти в Дзене
7 подписчиков

Всем привет!


Практически не писал про Kotlin, хотя он есть в названии канала. Надо исправляться.

Первый вопрос, который возникает при упоминании Kotlin - зачем он нужен, есть же Java?

Отвечаю:

1) Null safety - на уровне объявления типа мы говорим, допускает поле null или нет. Т.об. можно избежать NPE в Kotlin коде. Почему оговорка про Kotlin код - если передать значение в Java код - там работают правила Java


2) встроенная в язык иммутабельность - var и val. При объявлении свойства или локальной переменной мы обязаны указать может ли оно меняться. В отличие от Java где объевление const опционально и его можно забыть


3) гора синтаксического сахара. Многие относятся к сахару пренебрежительно, ну типа и без него можно написать хороший код, это баловство. Да, можно написать хороший код практически на любом языке. Но я бы сместил акцент на читаемость. В основном мы код читаем, а не пишем - свой или чужой. И при чтении краткость помогает. Конечно, при условии что синтаксис языка тебе понятен) Тут я бы противопоставил Kotlin и Scala, т.к. Scala исходя из моего опыта подталкивает разработчика к тому, чтобы написать такую одну строчку кода, чтобы с первого раза никто не понял - что она делает. Этот подход - зло, если надо проектом работает более одного человека. А т.к. все меняется - даже один человек может уволится или забросить код, то такие строчки - всегда зло.

Ссылку на спецификацию языка давать не буду - можно ссылаться на все разделы: свойства классов, отсутствие ;, можно опускать {} для простых классов, упрощенный синтаксис primary конструктора, отсутствие new, single expression functions, data классы (хотя тут Java 17 подтянулась), elvis оператор, ranges, функции области видимости, repeat, алиасы для import, print, функция main без класса ...

Часть этих фичей дает Lombok, по некоторым Java потихоньку догоняет Kotlin. Но плюс Kotlin в том, что у него их больше и они предоставляются на чистом JDK 8+

4) корутины - как альтернативный подход к многопоточности, когда код выглядит однопоточным, но выполняется параллельно. Корутины - отдельная большая тема, я к ней вернусь. Для начала могу сказать только одно - сначала изучите, потом применяйте. Это везде важно, но с корутинами особенно)


5) единообразие в конструкциях языка. Примеры: все есть классы, нет неявных преобразований, можно переопределять операции (т.е. плюсовать не только String), функция всегда возвращает ответ, var\val сюда же. Это упрощает обучение языку с нуля, сообственно такую цель ставили авторы языка. Ну и еще упростить работу коллегам, отвечающим за статический анализ кода в IDEA)

6) легкость создания DSL на Kotlin. Фактически за счет двух кусков синтаксического сахара: - возможность опустить круглые скобки у метода и возможность inline передать одну функцию в другую мы получаем вот такой код

func1 {

code of func 2

}

#kotlin #java
2 минуты