Довольно часто сталкиваюсь с вопросом касательно качества кода: "Почему написано именно так, а не так?". И я объясняю каждый раз. Именно поэтому решил составить эдакую заметку с объяснениями.

Второй возникающий вопрос: "Где научился так красиво писать?". Ответ на который будет к концу статьи.


Довольно распространённая проблема при написании кода в том, что он выглядит фактически сплошным текстом, и содержит в себе проблемные места, усложняющие не только чтение, но и дальнейшее сопровождение. В таких случаях не стоит пренебрегать использованием переносов строк и дополнительными символами "пробела".

Вспомнился бородатый анекдот по реальным событиям:

Разработчик читает свой код, написанный:

- сегодня: отличный современный крутой код! Всегда бы так писал!

- вчера: так, я остановился вот здесь. Ага!

- на прошлой неделе: что я там делал-то?..

- в прошлом месяце: так, где там задача с описанием?

- в прошлом году: ноги б переломать тому, кто этот код писал!


Недавно встретил такой участок кода (вставлю картинкой, чтобы не нарушить его вид):

Даже не буду говорить о существовании паттернов - скажу лишь, что ООП было придумано для сокращения дубляжа кода, но...

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

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


Помимо вставки дополнительных символов и переносов строк, старайтесь разделять код на логические блоки.

Логический блок - это участок кода состоящий из нескольких строк, объединённых между собой какой-либо общей чертой.

Для примера возьмём следующий участок:

$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: Так получилось, что преобладающее большинство комментаторов зацепились за примеры в статье, забив на основной её посыл. В связи с этим, я удалил все примеры, не несущие смысловой нагрузки и важности для статьи как таковой.