Заметки о codestyle
Довольно часто сталкиваюсь с вопросом касательно качества кода: "Почему написано именно так, а не так?". И я объясняю каждый раз. Именно поэтому решил составить эдакую заметку с объяснениями.
Второй возникающий вопрос: "Где научился так красиво писать?". Ответ на который будет к концу статьи.
Довольно распространённая проблема при написании кода в том, что он выглядит фактически сплошным текстом, и содержит в себе проблемные места, усложняющие не только чтение, но и дальнейшее сопровождение. В таких случаях не стоит пренебрегать использованием переносов строк и дополнительными символами "пробела".
Вспомнился бородатый анекдот по реальным событиям:
Разработчик читает свой код, написанный:
- сегодня: отличный современный крутой код! Всегда бы так писал!
- вчера: так, я остановился вот здесь. Ага!
- на прошлой неделе: что я там делал-то?..
- в прошлом месяце: так, где там задача с описанием?
- в прошлом году: ноги б переломать тому, кто этот код писал!
Недавно встретил такой участок кода (вставлю картинкой, чтобы не нарушить его вид):
Даже не буду говорить о существовании паттернов - скажу лишь, что ООП было придумано для сокращения дубляжа кода, но...
Данный участок очень плохо читается. Приходится вычитывать каждое слово с целью понять что в нём происходит и не пропустил ли чего. Это происходит из-за большого объёма слов на достаточно маленьком участке и является проблемой.
Мы давно пережили времена недостатка места на дисках и не стоит дорожить лишними символами. Это обычная экономия на спичках. Зачем усложнять жизнь не только себе, но и тем, кто после Вас будет поддерживать этот код? Плохо какать там, где едят.
Помимо вставки дополнительных символов и переносов строк, старайтесь разделять код на логические блоки.
Логический блок - это участок кода состоящий из нескольких строк, объединённых между собой какой-либо общей чертой.
Для примера возьмём следующий участок:
$salaryFirstBaseEmployer = $employer->salaryBases->first()->salary_base;
$salaryLastBaseEmployer = $employer->salaryBases->last()->salary_base;
$begin = Carbon::parse('2020-05-01')->startOfMonth()->startOfDay();
$end = $begin->clone()->endOfMonth()->endOfDay();
$endMonth = $begin->clone()->endOfMonth();
$startPeriod = new CarbonPeriod($begin, $end);
$endPeriod = new CarbonPeriod($begin, $end);
В нём мы видим непонятный массив текста, который можно разбить на логические блоки, позволяя быстрее понять его смысл, значительно сократив время на его поддержку:
$salaryFirstBaseEmployer = $employer->salaryBases->first()->salary_base;
$salaryLastBaseEmployer = $employer->salaryBases->last()->salary_base;
$begin = Carbon::parse('2020-05-01')->startOfMonth()->startOfDay();
$end = $begin->clone()->endOfMonth()->endOfDay();
$endMonth = $begin->clone()->endOfMonth();
$startPeriod = new CarbonPeriod($begin, $end);
$endPeriod = new CarbonPeriod($begin, $end);
Заключение
Очень давно мне дали дельный совет:
Всегда пиши код так, будто поддерживать его будет неуравновешенный и склонный к насилию маньяк-психопат, который знает где ты живёшь.
И это единственное правило, помогающее писать чистый и красивый код на любом языке программирования.
P.S.: Уже несколько людей, включая сообщения вне Хабра, написали о том, что есть такие штуки как PSR, автокомплит кода, форматирование кода в IDE, cs-fixer и так далее. Вы правда думаете, что я не знаю о их существовании? Проблема, раскрытая в статье, не в том, что их не используют, а в том, что мешает изначально красиво писать код, не поджигая пуканы других разработчиков?..
P.S.2: Так получилось, что преобладающее большинство комментаторов зацепились за примеры в статье, забив на основной её посыл. В связи с этим, я удалил все примеры, не несущие смысловой нагрузки и важности для статьи как таковой.