Найти тему
Дед Мазай на Котлине

Качество кода ч.2

код-ревью
код-ревью

Часть 1

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

4. Используем явное определение возвращаемых типов.

Потому что код

fun execute(
user: CurrentUser
) : FiltersResponse {...}

выглядит понятнее, чем код

fun execute(
user: CurrentUser
) {...}

5. Вместо return в функциях стараемся писать '=' там, где это возможно без необоснованного усложнения кода.

Потому что:

  • это приятная особенность Котлина
  • return-ов в одной функции можно поставить много (что не очень хорошо), а '=' только один раз. Хочется верить, что проникшись красотой этого правила, разработчик невольно начнёт думать о том, как все return-ы в функции заменить одним '=', как большую сложную функцию разбить на неколько поменьше и т.д. Т.е. начнёт думать, что очень хорошо )

6. Отказываемся от знака 'утверждение' ('!!') там, где это возможно без необоснованного усложнения кода.

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

7. В определении функции пишем каждый параметр на новой строке.

Причина здесь та же, что и в запятой после последнего параметра - чище история коммитов.

Некрасиво:

fun execute( user: CurrentUser, request: Request ) : FiltersResponse {...}

Красиво:

fun execute(
user: CurrentUser ,
request: Request,
) : FiltersResponse {...}

8. Большие массивы преобразуем в sequence или flow.

Причина - производительность. Каждая операция преобразования списка, массива или множества ведёт к созданию новой коллекции. С sequence или flow такого не будет (за исключением случая, когда мы захотим отсортировать последовательность).

9. Для блокирующих задач (работа с базами данных, файлами, сетью) используем корутины с диспетчером потоков Dispatchers.IO, вместо дефолтного.

Это правило применяется, в основном, при разработке на Котлине без фреймворка, выделяющего отдельный поток (или корутину) на каждый пользовательский запрос.

На сегодня всё. Продолжение следует...