Пишем чистый код на Kotlin. 8 простых, но эффективных приёмов
С каждым днем Kotlin набирает популярность в качестве языка программирования под Android. И уже даже те, кто был ярым адептом Java потихоньку тоже переходят на рекомендуемый Google язык разработки. Однако, на code review я часто замечаю, как разработчики, пересевшие на Kotlin, все еще пишут Java-подобный код, только используя синтаксис Kotlin.
Если вы хотите писать более чистый и лаконичный код на Kotlin, повысить свою эффективность и удивить коллег знанием языка, то прочитайте этот пост до конца — думаю найдете для себя много полезного.
1. Использование require и check
Часто, бывает так, что вам нужно кинуть exception в какой то специальной ситуации, например:
val result = bar(arg) ?: throw IllegalStateException("message")
Такой код можно заменить методом checkNotNull()
val result = checkNotNull(bar(arg)) "message"
>
А проверку типа
if (arg.length < 10) throw IllegalArgumentException("message")
Лучше заменить на использование метода require()
require(arg.length < 10) "message"
>
2. Использование функций вместо комментирования кода
Общая рекомендация — делайте методы, отвечающие за конкретный функционал. Часто можно увидеть методы на несколько десятков или сотен строк. Вместо этого, разбейте код на логические кусочки и вынесите в методы с понятным названием. Например:
val user = getUser(id)
validate(user)
activate(user)
Согласитесь, так сразу ясно, что делает этот код, даже не читая внутреннюю логику каждого метода. Как здесь может помочь Kotlin? Можно попробовать использовать функции-расширения:
private fun User.validate(): User // код валидации
return this
>private fun User.activate(): User // код активации
return this
>
В результате код будет выглядеть так:
val user = getUser(id)
.validate()
.activate()
3. Используйте Typealias для упрощения работы со сложными типами
Бывает так, что у вас есть какой-то сложный тип данных, например Map внутри которого значение для какого-то ключа тоже Map:
typealias Report = Map>
В таком случае удобно использовать typealias:
fun(report: Report) = …
// вместо
fun(report: Map>) = …
Однако, важно не злоупотреблять такой возможностью, и на мой взгляд, не нужно примитивные типы стараться закрыть алиасами, такие как Int, String и т.д — так как это только запутывает.
4. Используйте инфиксные функции для читабельности кода:
Вместо привычного использования функций, таких как:
val x = mapOf(1.to("a"))
val range = 1.until(10)
val loop = listOf(. ).zip(listOf(. ))
Можно использовать инфиксные функции, которые упростят чтение:
val x = mapOf(1 to "a")
val range = 1 until 10
val loop = listOf(. ) zip listOf(. )
5. Не забывайте про функции with, apply и also
with(foo.id) LOGGER.info("id is $this")
doSomething() // method of id
doSomethingElse(this)
>
val is $id")
id.doSomething()
doSomethingElse(id)
Функции let, also, apply, with сделают ваш код более чистым и лаконичным. Не забывайте ими пользоваться. Более подробно советую посмотреть тут
6. Пользуйтесь подчеркиванием, чтобы сделать длинные числа более читаемыми
Все знают, что magic numbers в коде это плохо. Их стоит выносить в отдельные переменные, или еще лучше в константы. Но и magic numbers должны при этом легко читаться, поэтому если это длинный числа — то можете разделять их знаком подчеркивания:
val x = 1_000_000
Согласитесь, лучше выглядит чем
val x = 1000000
7. Применяйте интерполяцию строк, чтобы сделать их более читаемыми
val x = “customer $id bought $ items” val y = “””He said “I’m tired””””
val x = “customer “ + id + “ bought “ + purchases.count() + “ items” val y = “He said “I’m tired””
8. Используйте обратные кавычки при написании имен тестов
Порой, название теста должно быть длинным — чтобы было ясно, что конкретно этот тест проверяет. Чтобы название теста не слипалось в одно слово, удобно называть такие тесты через пробелы как мы привыкли, и это очень удобно сделать в Kotlin, используя обратные кавычки:
fun `test foo ‐ when foo increases by 3% ‐ returns true`()
Согласитесь, это читать удобнее чем:
fun testFoo_whenFooIncreasesBy3Percent_returnsTrue()
Надеюсь, эти простые, но эффективные советы помогут вам писать более читабельный и эффективный код на Kotlin. Ну а если вы хотите прокачаться в Android-разработке, то приглашаю вас на 3-ий поток интенсива по Android-разработке на Kotlin. Узнать подробности можно по ссылке.
Подписывайся на канал чтобы не пропустить анонс и хлопай внизу если статья был полезная.
Понравилась статья? Не забудь подписаться и поставить лайк, а ещё
- Онлайн — интенсив по Android-разработке с code review
- Онлайн — интенсив по Android-разработке для новичков
- Instagram— карьерные лайфхаки, прямые эфиры с разработчиками, анонсы интенсивов
- Telegram — канал здесь публикуются полезные материалы для Android-разработчика
- Сайт AndroidSchool.ru — бесплатные туториалы каждую неделю
Как петербуржцы создали язык программирования Kotlin и почему его теперь используют Android и Google
Язык программирования Kotlin, созданный петербургской компанией JetBrains, стал официальным языком для разработки на Android.
Почему Kotlin назвали в честь острова в Финском заливе, как и когда язык стал популярен среди разработчиков мобильных приложений, почему им удобно пользоваться и зачем он изначально понадобился? Маркетинг-менеджер Kotlin Роман Белов рассказал «Бумаге», как в Петербурге создавали язык, признанный Google.
Как и когда появился язык программирования Kotlin?
Мы начали разрабатывать Kotlin в 2010 году. К тому времени компании JetBrains было уже десять лет и основной продукт компании — JetBrains IntelliJ IDEA, полностью написанный на Java, — был уже очень большого размера. Стало понятно, что во многом Java нас не устраивает. Было несколько альтернативных языков программирования, но оказалось, что ни один из них не соответствует тем требованиям, которые мы выдвигаем к языку, на который хотели бы перейти.
Была и вторая причина. Когда в одном месте собирается очень много людей с большим экспертным опытом в области языков программирования, часто получается, что рождается новый язык. Так оно и получилось. Во-первых, была осознанная и серьезная потребность, а во-вторых, мы могли ее удовлетворить.
Как и многие наши продукты, мы создавали Kotlin исходя из своей необходимости. Это, вообще, заложенный в развитии компании принцип: мы видим, что на рынке нет инструмента, который решал бы какую-то проблему, и тогда создаем его. Наши первые пользователи — это всегда мы сами. Поэтому обычно у нас получаются очень практичные и прагматичные инструменты.
Почему Kotlin называется именно так?
В тот момент, когда придумывалось название, на JVM (Java Virtual Machine — прим. «Бумаги») существовали еще языки, названные в честь островов: Java, Ceylon. И мы подумали: какой у нас есть остров рядом? Котлин. И это название прижилось. Тут нет какой-то традиции или правила, но так случилось, какой-то более глубокой мысли за этим нет.
В чем особенности языка?
Наверное, самое удачное слово, которое подходит к языку Kotlin, — это прагматичность. Языки бывают разные: некоторые выходят из академической среды, другие созданы для конкретных платформ. Мы изначально были нацелены на практичный язык для максимально широкой аудитории. Он должен был быть демократичным, то есть без заумных вещей. Бывают ситуации, когда программист знает все тонкости языка и благодаря этому пишет хитрый код, — и в этот код никто из джуниор-программистов не может лезть. Нам нужен язык, который одинаково хорош как для начинающих программистов, так и для продвинутых.
Внутри компании у нас также полная демократия: каждый программист сам решает, на каком языке писать, на Java или на Kotlin, и далеко не все переходят на Kotlin. Для меня как для маркетинг-менеджера языка JetBrains — это маленький мир. Когда в нашей большой компании все перейдут на Kotlin, тогда, наверное, и во всем мире программисты перейдут на него. Но, действительно, процент использования Kotlin в компании неизменно растет.
Чем же Kotlin так хорош? В первую очередь разработчики любят Kotlin за его краткость и выразительность. Это свойственно всем новым языкам. Раньше людей это не очень смущало, потом размер программ стал больше — люди поняли, что пишут очень много совершенно бессмысленных кусков кода только потому, что от них это требует синтаксис языка программирования.
Вторая причина в том, что он полностью совместим с Java и позволяет постепенно мигрировать с Java-приложения на Kotlin-приложение. Например, приложение Basecamp в течение полугода полностью мигрировало с Java на Kotlin.
Третий пункт — 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?
В компании мы начали применять Kotlin года с 2012-го, но официальный релиз языка был 17 февраля 2016 года. До этого времени конструкции языка активно менялись и поддерживать код на Kotlin было достаточно проблематично. Надо понимать, что развитие языков программирования требует большого внимания к обратной совместимости. И когда мы заявили о релизе, взяли на себя обязательство по обратной совместимости: по тому, что новый код будет совместим на бинарном уровне со старым. И мы эти обязательства выполняем.
Сейчас язык Kotlin в своих приложениях используют такие российские компании, как Avito и «Рокет Банк». За прошлый год Kotlin опробовали 160 тысяч программистов. До сегодняшнего дня Kotlin показывал экспоненциальный рост по числу программистов, и, думаю, объявление Google поможет нам продолжить этот рост.
Google объявила Kotlin приоритетным языком программирования для разработки Android-приложений Статьи редакции
На конференции для разработчиков I/O 2019 Google объявила, что язык программирования Kotlin теперь является предпочтительным языком для разработчиков приложений под Android — новые API и библиотеки Jetpack будут публиковаться сначала на Kotlin.
Google I/O 2017 TechCrunch
«Если вы начинаете новый проект, вы должны писать его на Kotlin: код, написанный на Kotlin чаще всего означает для вас (разработчиков) гораздо меньше кода — меньше кода для набора, тестирования и обслуживания», — заявляет Google. По мнению компании, разработка под Android будет всё больше становиться разработкой на Kotlin.
dobreprogramy
Kotlin – язык, созданный в 2010 году международной компанией JetBrains, которую основали петербургские программисты. Впервые Google объявила о поддержке Kotlin в Android Studio IDE в 2017 году.
По словам Google, за два года популярность этого языка программирования существенно выросла: более 50% профессиональных разработчиков под Android используют Kotlin в своих проектах. Kotlin стал четвертым по популярности языком программирования по результатам последнего опроса разработчиков на Stack Overflow.
«Мы понимаем, что не все сейчас используют Kotlin, но мы считаем, что вы должны быть на нём. У вас могут быть веские причины по-прежнему использовать C++ и Java, и это совершенно нормально. Они никуда не уходят», заявляет Чет Хаазе, Developer Advocate для Android.
78 комментариев
Написать комментарий.
Джетбрейнс конечно крутые, как и все их продукты. Уважуха
Развернуть ветку
Да только будущее за IDE в браузерах. И кажется они сейчас ничего не делают в этом направлении.
Развернуть ветку
6 комментариев
Но с рендерингом шрифтов на макоси в последней версии IDEA они знатно накосячили, я до сих пор не понимаю, как это прошло тестирование https://youtrack.jetbrains.com/issue/JBR-1348
https://youtrack.jetbrains.com/issue/JBR-1348
youtrack.jetbrains.com
Развернуть ветку
4 комментария
Да, красавчики товарищи.
Развернуть ветку
Пацаны пришли к успеху
Развернуть ветку
Комментарий удален модератором
Развернуть ветку
И весь этот код на джаве автоматический, появляется в 2 клика, не понимаю проблемы
Развернуть ветку
4 комментария
Аккаунт удален
Развернуть ветку
Я стесняюсь спросить, а радоваться надо только за русских?
Мне кажется, важнее, когда хороший продукт в принципе выходит. Еще лучше, если под свободной лицензией. А кто его сделал — не так важно.
Развернуть ветку
14 комментариев
Развернуть ветку
Русские? Но фирма-то чешская. И на сайте нет никаких упоминаний о русских корнях, и все ценники в долларах. Забавно, что чешский антивирус Аваст можно купить за рубли, а типо российские продукты джет брейнс — только за доллары.
Развернуть ветку
2 комментария
Ну, собственно говоря чуть выше по иерархии. Вы радуетесь за JetBrains, но кажется забываете, что и сам Google вышел из под крыла простого московского паренька Серёжи.
Развернуть ветку
Да вы офигели, я же только-только снова начал изучать Java
Развернуть ветку
Ну так для того чтобы осилить Котлин, нужно хоть основы Джавы знать.
Развернуть ветку
Аккаунт удален
Развернуть ветку
Как говорил мой знакомый — чтобы понять прелесть Kotlin, нужно сначала помучаться с Java. Ну и как минимум не помешает знать, во что компилируется твой код на Kotlin.
Развернуть ветку
Молодцы JetBrains. Спасибо им за образовательную деятельность в рамках CSC.
Развернуть ветку
Но ведь. Dart.
Как же так.
Развернуть ветку
Dart для кроссплатформенности на замену ReactNative, а Kotlin — для натива вместо Java
Развернуть ветку
7 комментариев
swift для ios, kotlin для android. Они даже похожи друг на друга. В obj-c и java я как то совсем не могу, синтаксис ломает голову.
Развернуть ветку
Развернуть ветку
Аккаунт удален
Развернуть ветку
Аккаунт удален
Развернуть ветку
2 комментария
Аккаунт удален
Развернуть ветку
Я бы не советовал молодым программистам начинать с Java. Сам я на этом языке ничего серьезного не писал, честно признаюсь. Но мне приходилось использовать его при разработке под android до появления kotlin. И это было не круто. Основная проблема в том, что Java стимулирует разработчика нарушать принципы ООП и SOLID. Это очень плохо сказывается на стоимости поддержки. Так же могу отметить отсутствие аналога Linq до недавнего времени. А то, что появилось сейчас, является его жалким подобием. Ну и многословность, скорее всего вытекающая из первых двух претензий.
Kotlin лишён всех этих недостатков. Однажды попробовав его, я не написал больше ни одной строки на Java. Возможно, в enterprise Java ещё актуален, но под android у него нет шансов на фоне kotlin.
Развернуть ветку
3 комментария
Да уж. Мутабельный класс — отличный пример для 2019 года.
Развернуть ветку
А если это объект из бд и тебе надо обновить в нём одно поле, делать все поля immutable и создавать новый объект с изменённым полем? 🙂
