Тесты Пообщаться с GPT Протестировать код
Программирование Аналитика Дизайн Маркетинг Управление проектами
26 Мар 2023
8 мин
4301

Как писать чистый код

Пройдите тест, узнайте какой профессии подходите

Критерии чистоты и правила составления чистого кода.

Инженер-программист Мартин Фаулер сказал: «Кто угодно может написать код, который поймет компьютер. Хорошие программисты пишут код, который поймет человек».

Когда пишете код, мало сделать его просто рабочим. Вы должны стремиться сделать его читаемым, понятным и удобным для тех, кто будет с ним работать.

Что такое чистый код и зачем он нужен

Чистый, или хороший, код — это код, который удобно читать и понимать. Так другие программисты легко разберутся, что делает программа. Еще его можно легко изменить, а не переписывать заново.

Чистый код помогает:

  • Ускорить работу — хороший код быстрее читать и понимать.
  • Снизить количество ошибок — такой код легко проверить.
  • Повысить эффективность команды.
  • Поддерживать и развивать программу — если код понятный, его проще исправлять и улучшать.

Критерии чистоты кода

Эти правила делают код понятным и удобным:

  • Отсутствие избыточности.
    В коде не должно быть лишних элементов. Не дублируйте один и тот же скрипт несколько раз, лучше вынесите его в отдельную функцию. Классы и методы, которые делают всё и сразу, очень сложно читать и обновлять.
  • Функциональность и читаемость.
    Каждая функция должна выполнять одну задачу и делать это хорошо. Это значит, что код правильно работает в любых ситуациях и учитывает возможные ошибки. Например, если функция делит одно число на другое, она должна проверять, что делитель не ноль, иначе программа сломается. А еще скрипт должен быть написан так, чтобы его легко мог понять другой программист.

В онлайн-университете Skypro на курсе «Веб-разработчик» учат не только писать чистый код, но и, например, писать код на JavaScript, добавлять на сайты интерактивные элементы, использовать системы контроля, отслеживать изменения в коде, организовывать серверную часть и работать с внешними системами. За 15 месяцев вы освоите нужные навыки, чтобы сменить однообразную работу на ту, что всегда нравилась.

Как сделать код чистым

Несколько простых советов:

  • Пишите понятные названия переменных, классов, функций.

Названия должны четко отображать, что именно делает переменная или функция. Не используйте слишком короткие и неговорящие названия. 

Плохо: a1 или cnt. // Ничего не понятно.

Нормально: count.

Хорошо: letters_count etc. // Сразу ясно, что вы хотите посчитать. 

Слишком длинные названия — тоже плохо. Никто не будет их читать, и они занимают слишком много места. Используйте только общеизвестные аббревиатуры.

  • Не копируйте код.

Изображение 1

copypasta meme

Источник: sky.pro

Источник: sky.pro

Копирование и повторение кода в нескольких местах — это плохо. И вот почему:

 

  1. Скопированный код занимает много места — уходит больше времени на то, чтобы прочитать и отладить код.
  2. Можно ошибиться при копировании логики и забыть изменить что-то важное.
  3. Постоянная угроза ошибиться, когда копируете куски кода. Например, если изменили что-то в одном месте и забыли скопировать в другое. 
  4. Тратится время на изменения: нужно обновлять код во всех местах, куда он был скопирован. Например, если функция по расчету стоимости товара скопирована в несколько файлов и нужно изменить логику расчета, придется редактировать каждый файл.

Лучше вынести общий код в отдельную функцию:

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

Плохо: скопировали код. 

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 строк, просто делайте так:

  1. Соберите несколько элементов в одну структуру.
    код
  2. Или получите нужные значения внутри функции. Передайте 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, линтеры, форматеры кода, инструменты для автоматического тестирования.

Добавить комментарий