Довольно часто сталкиваюсь с вопросом касательно качества кода: "Почему написано именно так, а не так?". И я объясняю каждый раз. Именно поэтому решил составить эдакую заметку с объяснениями.
Второй возникающий вопрос: "Где научился так красиво писать?". Ответ на который будет к концу статьи.
Довольно распространённая проблема при написании кода в том, что он выглядит фактически сплошным текстом, и содержит в себе проблемные места, усложняющие не только чтение, но и дальнейшее сопровождение. В таких случаях не стоит пренебрегать использованием переносов строк и дополнительными символами "пробела".
Вспомнился бородатый анекдот по реальным событиям:
Разработчик читает свой код, написанный:
- сегодня: отличный современный крутой код! Всегда бы так писал!
- вчера: так, я остановился вот здесь. Ага!
- на прошлой неделе: что я там делал-то?..
- в прошлом месяце: так, где там задача с описанием?
- в прошлом году: ноги б переломать тому, кто этот код писал!
Недавно встретил такой участок кода (вставлю картинкой, чтобы не нарушить его вид):
Даже не буду говорить о существовании паттернов - скажу лишь, что ООП было придумано для сокращения дубляжа кода, но...
Данный участок очень плохо читается. Приходится вычитывать каждое слово с целью понять что в нём происходит и не пропустил ли чего. Это происходит из-за большого объёма слов на достаточно маленьком участке и является проблемой.
Мы давно пережили времена недостатка места на дисках и не стоит дорожить лишними символами. Это обычная экономия на спичках. Зачем усложнять жизнь не только себе, но и тем, кто после Вас будет поддерживать этот код? Плохо какать там, где едят.
Помимо вставки дополнительных символов и переносов строк, старайтесь разделять код на логические блоки.
Логический блок - это участок кода состоящий из нескольких строк, объединённых между собой какой-либо общей чертой.
Для примера возьмём следующий участок:
$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: Так получилось, что преобладающее большинство комментаторов зацепились за примеры в статье, забив на основной её посыл. В связи с этим, я удалил все примеры, не несущие смысловой нагрузки и важности для статьи как таковой.
PR0metheus
Учится стилю надо начинать с PSR-2 и PSR-12 (в случае php), а лучше с инструментов которые будут держать код проекта в тонусе )) а не заставлять команду ревьюить codestyle :)
Helldar Автор
Если бы всё было гладко так, как Вы говорите, как минимум этой статьи бы не было.
Вдобавок, инструменты помогают поддерживать правильный стиль, но сам факт необходимости его использования должен быть в голове разработчика.
К сожалению, очень часто сталкиваюсь с отношением к стилю кода как к "херне, которую спрашивают только на собесе".
Но если разработчики готовы улучшать свои показатели, то начальникам это не всегда нравится. Для примера, на одной из прошлых моих работ был обязательный код-ревью. Новички в отделе его проходили долго, контроллировал их. Какое-то время начальник отдела терпел время, потраченное на это дело, после чего психанул и сказал "чтобы не смели тратить время в пустую — выгружай как есть, у нас задач вагон". И всё пошло по известному месту.
PR0metheus
Для этого достаточно настроить препуш хуки и для надежности навесить автоматическую проверку на стороне ci/cd.
Команды разные и требования к коду разные, а еще зачастую могут разниться от языка к языку — js/php и как Вы и заметили заставлять проверять это вручную — путь в никуда )
Helldar Автор
Что мешает изначально писать красиво, не полагаясь на инструменты?