вступление

Этот пост в блоге расскажет, почему важно выработать привычку писать чистый код. Я узнал об этом из книги Роберта С. Мартина «Чистый код», и это будет полезно и важно узнать людям где угодно, от старших инженеров до тех, кто только вчера начал программировать.

Так почему мы должны беспокоиться о написании чистого кода? — вот два примера:

  1. Представьте, что вы создаете свое собственное приложение, и со временем оно растет все больше и больше. Однажды вам нужно вернуться, чтобы изменить что-то с того момента, когда вы только начали создавать приложение. Вы бросаете один взгляд на код и говорите: «Ооооо, что здесь вообще такое?». Предполагая, что вы не написали чистый код, весь код в ваших файлах беспорядочный, сырой и не описательный. Теперь, когда вы хотите что-то изменить или исправить ошибку, это в 100 раз сложнее, занимает больше времени, а в некоторых случаях почти невозможно, потому что в процессе вы ломаете другие вещи.
  2. Допустим, вы работаете в компании и пишете кучу кода. Сценарий, который вам нужен, заключается в том, что когда нынешние и будущие инженеры/будущие сотрудники будут работать с написанным вами кодом, им будет легко понять и изменить его, не ломая весь работающий продукт.

Общие привычки чистого кода:

Именование переменных:

Именование — это способ, которым мы сообщаем себе и другим инженерам, на что мы смотрим. Если мы посмотрим на переменную, например, я могу написать:

const per = ‘Jay’

Это плохая привычка, потому что то, что за? Вероятно, сокращение от человека, но как я должен был узнать это, глядя на per? Только увидев имя в качестве значения, я начал понимать, что может быть. Лучшей практикой было бы

const person = ‘Jay’

Хорошо, теперь это немного яснее, но все же не самое лучшее. Человек кажется слишком общим, поэтому, подумав об этом, мы должны сделать это:

const pesronName = ‘Jay’

Отлично, теперь у нас есть описательное имя переменной, которое говорит нам, что мы должны исключать.

В общем, ваши методы именования должны описывать то, с чем вы работаете (лично я также сторонник создания больших имен переменных, если это необходимо для облегчения понимания).

Функционал и функции:

Подобно именованию переменных, вы хотите, чтобы имя вашей функции описывало то, что происходит, например:

function addTwo(a,b){
  return a+b
}

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

function addTwoNumbers(num1, num2){
  return num1+num2
}

Еще один важный аспект функций — убедиться, что у них есть только одна обязанность. Мы не хотим получить функцию, которая делает 5 разных вещей. Пример:

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

const targetLocationGenerator = (min, max) => {
  let number = Math.random() * (min — max);
  return number;
};

Здесь у нас есть функция, которая будет генерировать новое местоположение для цели. Местоположение будет представлено числом, возвращаемым этой функцией (одна обязанность). Тогда у нас есть:

const movingTarget = () => {
  target.style.right = targetLocationGenerator(-59.4, -0) + “rem”;
  target.style.bottom = targetLocationGenerator(-34.8, -0) + “rem”;
};

Эта функция фактически перемещает цель и использует первую функцию, чтобы «решить», куда двигаться» (одна обязанность). Затем эта функция передается другой функции (щелчок по цели).

Комментарии:

Лично я считаю, что в лучшем случае ваш код должен быть чистым и достаточно описательным, чтобы вам не нужно было его комментировать. Я должен иметь возможность посмотреть на это и сказать: «А, вот что делает код». По словам К. Мартина, «комментарии — это извинение, а не требование. Хороший код в основном документирует сам себя». При этом вы должны добавлять комментарии, которые помогают объяснить логику.

Неиспользованный код:

Хорошей практикой является удаление неиспользуемого/закомментированного кода из ваших файлов. Мы хотим иметь чистый читаемый файл, а внутренний код просто создает беспорядок без всякой причины. В этой заметке использование правильного отступа (в зависимости от языка) значительно упрощает чтение ваших файлов.

Сухой

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

Допустим, у нас есть эти две функции:

function sayHiToAPerson(personName){
  return `${personName} Welcome!`
}
function askPersonHowAreThey(personName){
  return `${personName} How are you?`
}

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

function acknowledgeAPesron(personName, acknowledgment){
  return `${personName} ${acknowledgment}`
}

Мы просто объединили эти две функции в одну рабочую функцию и тем самым сделали наш код более чистым и сухим.

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