Инженер-программист Мартин Фаулер сказал: «Кто угодно может написать код, который поймет компьютер. Хорошие программисты пишут код, который поймет человек».
Когда пишете код, мало сделать его просто рабочим. Вы должны стремиться сделать его читаемым, понятным и удобным для тех, кто будет с ним работать.
Что такое чистый код и зачем он нужен
Чистый, или хороший, код — это код, который удобно читать и понимать. Так другие программисты легко разберутся, что делает программа. Еще его можно легко изменить, а не переписывать заново.
Чистый код помогает:
- Ускорить работу — хороший код быстрее читать и понимать.
- Снизить количество ошибок — такой код легко проверить.
- Повысить эффективность команды.
- Поддерживать и развивать программу — если код понятный, его проще исправлять и улучшать.
Критерии чистоты кода
Эти правила делают код понятным и удобным:
- Отсутствие избыточности.
В коде не должно быть лишних элементов. Не дублируйте один и тот же скрипт несколько раз, лучше вынесите его в отдельную функцию. Классы и методы, которые делают всё и сразу, очень сложно читать и обновлять. - Функциональность и читаемость.
Каждая функция должна выполнять одну задачу и делать это хорошо. Это значит, что код правильно работает в любых ситуациях и учитывает возможные ошибки. Например, если функция делит одно число на другое, она должна проверять, что делитель не ноль, иначе программа сломается. А еще скрипт должен быть написан так, чтобы его легко мог понять другой программист.
В онлайн-университете Skypro на курсе «Веб-разработчик» учат не только писать чистый код, но и, например, писать код на JavaScript, добавлять на сайты интерактивные элементы, использовать системы контроля, отслеживать изменения в коде, организовывать серверную часть и работать с внешними системами. За 15 месяцев вы освоите нужные навыки, чтобы сменить однообразную работу на ту, что всегда нравилась.
Как сделать код чистым
Несколько простых советов:
- Пишите понятные названия переменных, классов, функций.
Названия должны четко отображать, что именно делает переменная или функция. Не используйте слишком короткие и неговорящие названия.
Плохо: a1 или cnt. // Ничего не понятно.
Нормально: count.
Хорошо: letters_count etc. // Сразу ясно, что вы хотите посчитать.
Слишком длинные названия — тоже плохо. Никто не будет их читать, и они занимают слишком много места. Используйте только общеизвестные аббревиатуры.
- Не копируйте код.
Источник: sky.pro
Источник: sky.pro
Копирование и повторение кода в нескольких местах — это плохо. И вот почему:
- Скопированный код занимает много места — уходит больше времени на то, чтобы прочитать и отладить код.
- Можно ошибиться при копировании логики и забыть изменить что-то важное.
- Постоянная угроза ошибиться, когда копируете куски кода. Например, если изменили что-то в одном месте и забыли скопировать в другое.
- Тратится время на изменения: нужно обновлять код во всех местах, куда он был скопирован. Например, если функция по расчету стоимости товара скопирована в несколько файлов и нужно изменить логику расчета, придется редактировать каждый файл.
Лучше вынести общий код в отдельную функцию:
- Вынесите общую часть в отдельную функцию и вызовите из нескольких мест.
- Если не получается вынести сразу, попробуйте настроить или добавить условия, чтобы можно было вынести в отдельную функцию.
Плохо: скопировали код.
result1 = sum([1, 2, 3])
result2 = sum([4, 5, 6])
Хорошо: вынесли в функцию.
def calculate sum(numbers):
return sum(numbers)
Результат: теперь, если нужно изменить логику суммирования, вы сделаете это в одном месте.
result1 = calculate_sum([1, 2, 3])
result2 = calculate_sum([4, 5, 6])
- Инкапсулируйте примитивные типы.
Примитивные типы — это int, string и bool. Часто лучше скрывать примитивы, особенно boolean. Если их не прятать, трудно понять, что делает функция. Например, если опция возвращает bool, не всегда ясно, что означает false — ошибку или просто отрицательный результат.
Если у функции несколько аргументов одного типа, можно случайно перепутать их местами при вызове, и компилятор не заметит ошибку.
Источник: sky.pro
Чтобы избежать таких ошибок, можно заменить примитивные типы на специальные, например использовать enum.
Плохо: function getResultFromState(int state) : bool.
Хорошо: function getResultFromState(State state) : Result / enum State {IDLE = 1, DONE = 2}, enum Result {SUCCESS = ‘success’, FAIL = ‘fail’}.
- Минимизируйте уровни вложенности.
Каждый уровень вложенности усложняет код. Так его труднее читать и отлаживать. Это особенно заметно, когда много вложенных if или циклов. Легко ошибиться и не заметить какое-то условие.
Источник: sky.pro
Источник: sky.pro
Упрощайте логику. Вынесите уровни в отдельные функции. Это упростит задачу всем, кто будет читать и отлаживать код.
Источник: sky.pro
Источник: sky.pro
Чтобы код смотрелся еще чище, уберите else с помощью early return.
Источник: sky.pro
- Используйте небольшие классы и методы.
Чем короче функция, тем легче ее читать и отлаживать. То же касается и классов, в которых много методов: сложно быстро понять, что в них происходит.
Нет идеального количества строк для функции или класса, но всегда думайте о тех, кто будет читать скрипт. Хорошая функция — примерно 20 строк, а в классе не должно быть слишком много кода, чтобы не прокручивать бесконечно.
Перед тем как писать функцию, помните: она не должна делать много вещей одновременно. Разделите ее на несколько функций, как разбиваете большую задачу на маленькие.
Источник: sky.pro
- Минимизируйте количество аргументов функции.
Чем больше аргументов у функции, тем легче что-то перепутать или ошибиться. Эту проблему можно решить, если делать функции небольшими и фокусировать их на одной задаче. Если всё-таки нужно передать 10 аргументов в функцию из 15–20 строк, просто делайте так:
- Соберите несколько элементов в одну структуру.
- Или получите нужные значения внутри функции. Передайте id как аргумент и сделайте запрос в базу данных внутри функции.
Источник: sky.pro
Дополнительные действия для чистоты кода
Эти действия поддержат чистоту кода:
- Пользуйтесь интегрированной средой разработки — IDE.
IDE — это программа, которая помогает писать код быстрее и качественнее. Она подсказывает ошибки, автоматически форматирует код и предлагает улучшения. Много компаний разрабатывают софт, который помогает ловить ошибки. Например, Jetbrains создала IntellIJ Idea для Java и Kotlin, а еще серию продуктов PyCharm и CLion для других языков программирования. Компания Microsoft создала Visual Studio Code. - Запрашивайте код-ревью.
Код-ревью — это когда более опытные разработчики проверяют ваш код и дают комментарии. Так вы увидите свои ошибки и научитесь писать чистый код. Не все любят код-ревью: этот процесс занимает ваше время и время того, кто проверяет. А если вы еще только учитесь писать хороший код, то проверка затянется на несколько итераций.
Студенты на курсе «Веб-разработчик» могут попросить код-ревью у одногруппников. А домашки на первых порах — это код-ревью от преподавателя. Так студенты учатся писать чистый код и находить ошибки в коде других разработчиков.
- Анализируйте решения и ошибки.
После завершения задачи разберите, что получилось хорошо, а что стоит улучшить. Запишите для себя небольшие правила. Например: «Стараться избегать глубокой вложенности». В следующий раз проверяйте, сколько у вас вложенных if и циклов. После каждого код-ревью анализируйте свои решения, чтобы не делать одни и те же ошибки. - Читайте документацию.
Документация помогает писать код правильно и эффективно. Если поймете, как работают функция и конструкция языка, сможете использовать их там, где нужно. Например, найдете более подходящую функцию, которая упростит код. Это поможет избежать ошибок и лучше разобраться в работе параметров по умолчанию.
Инструменты для написания чистого кода
Чистота кода зависит не только от навыка, но и от того, какими инструментами пользуетесь.
- Интегрированные среды разработки — IDE.
IDE — это программы, которые помогают писать, редактировать и отлаживать код. Они подсказывают, автоматически форматируют и проверяют ошибки. Например, приложение PyCharm для Python подскажет, если вы забыли закрыть скобку или использовали неправильное имя переменной. А Visual Studio Code автоматически форматирует код. - Линтеры — Linters.
Линтеры — это инструменты, которые анализируют код, находят ошибки, стилистические проблемы и потенциальные баги. Например, Pylint для Python укажет на то, что вы используете неправильные отступы или слишком длинные строки. ESLint для JavaScript подскажет, что вы забыли точку с запятой или использовали неправильные кавычки. - Форматеры кода — Code Formatters.
Форматеры автоматически приводят код к единому стилю и делают его более читаемым. Например, Black для Python преобразует «x=10» в «x = 10», Prettier для JavaScript, HTML, CSS выравнивает отступы и добавляет пробелы. - Инструменты для автоматического тестирования.
Автоматические тесты подтверждают, что код работает правильно и не ломается, если что-то изменить. Например, с Pytest для Python проверите, что функция «calculate sum(2, 3)» возвращает «5», а Jest для JavaScript проанализирует, что компонент React отображает правильный текст.
Коротко о главном
- Чистый код легко читать и понимать, в нём нет ничего лишнего, он выполняет только одну задачу.
- Пишите код правильно: используйте понятные названия переменных, классов и функций, не копируйте код, скрывайте примитивы, не делайте много вложений и аргументов, используйте небольшие классы и методы.
- Дополнительно пользуйтесь интегрированной средой разработки IDE, просите код-ревью, анализируйте решения и ошибки, читайте документацию.
- Полезные инструменты для хорошего скрипта: IDE, линтеры, форматеры кода, инструменты для автоматического тестирования.
Добавить комментарий