вступление
Этот пост в блоге расскажет, почему важно выработать привычку писать чистый код. Я узнал об этом из книги Роберта С. Мартина «Чистый код», и это будет полезно и важно узнать людям где угодно, от старших инженеров до тех, кто только вчера начал программировать.
Так почему мы должны беспокоиться о написании чистого кода? — вот два примера:
- Представьте, что вы создаете свое собственное приложение, и со временем оно растет все больше и больше. Однажды вам нужно вернуться, чтобы изменить что-то с того момента, когда вы только начали создавать приложение. Вы бросаете один взгляд на код и говорите: «Ооооо, что здесь вообще такое?». Предполагая, что вы не написали чистый код, весь код в ваших файлах беспорядочный, сырой и не описательный. Теперь, когда вы хотите что-то изменить или исправить ошибку, это в 100 раз сложнее, занимает больше времени, а в некоторых случаях почти невозможно, потому что в процессе вы ломаете другие вещи.
- Допустим, вы работаете в компании и пишете кучу кода. Сценарий, который вам нужен, заключается в том, что когда нынешние и будущие инженеры/будущие сотрудники будут работать с написанным вами кодом, им будет легко понять и изменить его, не ломая весь работающий продукт.
Общие привычки чистого кода:
Именование переменных:
Именование — это способ, которым мы сообщаем себе и другим инженерам, на что мы смотрим. Если мы посмотрим на переменную, например, я могу написать:
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}` }
Мы просто объединили эти две функции в одну рабочую функцию и тем самым сделали наш код более чистым и сухим.
В заключение, наличие чистого кода может быть разницей между сидением в течение нескольких часов подряд, пытаясь отладить что-то, не ломая все приложение, и устранением ошибки в течение нескольких минут. Это принесет пользу не только вам, но и всем, кто когда-либо будет работать с вами и вашим кодом. Написание чистого кода требует практики. Я знаю по себе много раз, что мне не хочется возвращаться к моему коду, чтобы очистить и преломить его, но вы были бы признательны за это в будущем. Так что вперед, начинайте писать чистый код!