Узнайте, чего следует избегать в вашем коде Kotlin

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

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

Вывод из статьи

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

Типы

Начнем с простых вещей, таких как val и var. Если вы раньше были Java-разработчиком, возможно, вам будет удобнее использовать val и var вместо того, чтобы постоянно упоминать типы данных.

Не было бы лучше, если бы мы могли видеть тип переменной listOfTvShows? Мы можем сделать это, включив подсказки в Android Studio.

Перейдите следующим образом: Настройки ›Редактор› Общие ›Внешний вид - вам нужно установить флажок« Показывать подсказки по именам параметров ».

После этого вы увидите подсказки для переменной, которая не была объявлена ​​с типами данных. Посмотрите на listOfTvShows variable после включения опции подсказки.

Что ж, это полезно и удобно во многих ситуациях. Но что, если кто-то из вашей команды добавил в список целое число. Посмотри.

Теперь он не будет показывать никаких ошибок, но изменит тип списка с String на Any, и вы не сможете его контролировать. Поэтому используйте val и var без типов данных только для простых объявлений, но когда дело доходит до подобных ситуаций, лучше уделить время и упомянуть тип данных.

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

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

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

"Это" здорово, но будет здорово переименовать "это"

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

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

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

В этом фрагменте кода внутри let it - это ArrayList, а внутри for loop это String. Это немного сбивает с толку, правда? Теперь давайте посмотрим на тот же код без подсказок.

Это безумие, правда? Нет читабельности. Вот что происходит, когда вы отчаянно пытаетесь использовать Котлин слишком часто.

Удобство обслуживания и читаемость - два основных аспекта кода, поэтому имейте в виду их. Чтобы импровизировать код, мы должны переименовать it с подходящим именем. Посмотри.

Опять же, вам не нужно переименовывать it внутри цикла forEach, но это ваш выбор. Не увлекайтесь излишней ясностью или беспорядком. Этот тип кодирования поможет вашим коллегам по команде немного быстрее понять контекст.

Функции объема

Функции области видимости в Kotlin - еще одна очень привлекательная функция - вы можете использовать их, чтобы придать своему коду функциональный вид программирования. Они также удобны в таких ситуациях, как let для нулевой проверки, apply in viewholders и т. Д. Я не собираюсь обсуждать самую спорную тему - где использовать конкретную функцию области видимости; скорее, я хотел бы поговорить о том, как их не использовать.

Давайте возьмем фрагмент кода, в котором мы не используем нашу природу Kotlin. Посмотри.

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

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

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

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

Функции расширения - это круто, но не переусердствуйте с ними

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

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

Оказывается, функции расширения не предназначены для того, чтобы оживить ваш синтаксис (не значит, что это неправильно), но основная цель - реализовать дополнительные функции в классе для реализации функций без создания нового класса.

Легко увлечься функциями расширения в смысле написания более лаконичного кода; Я тоже так делаю. Иногда я делаю все функции функциями расширения в процессе преобразования удаленной модели в модель локальной базы данных, и я не осознаю этого в данный момент.

Каким-то образом я наткнулся на доклад Huyen Tue Dao на KotlinConf 2019, о котором упоминаю в конце этой статьи. Она показала мне, как далеко я зашел с одержимостью эффективным использованием расширений.

Обновлять

Чтобы узнать больше о Kotlin, прочтите остальные статьи из серии Advanced Programming With Kotlin:

Чтобы узнать больше о сопрограммах Kotlin и других расширенных функциях Kotlin, прочтите следующие статьи:

Заключение

Прежде чем мы подведем итоги, я хотел бы поблагодарить Huyen Tue Dao. Я узнал многие концепции, которые упоминал здесь, из выступления, которое она провела на KotlinConfig 2019. Если Вам интересно, посмотрите:

Спасибо за чтение.