26 Окт 2022
7 мин
3255

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

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

Содержание

Чистый код нужен для того, чтобы его могли быстро прочитать другие люди и не тратить время на поиск ошибок и рефакторинг. Поэтому учиться его писать нужно как можно раньше.

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

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

В этой статье — про правила чистого кода и как применять их на практике. 

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

Отсутствие избыточности

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

Функциональность и читаемость

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

На курсах Skypro для программистов, например «Веб-разработчик», учат не только писать чистый код, но и тестировать свой или чужой код на предмет багов. А еще есть командные проекты, когда студенты работают над задачей вместе. Так лучше усваиваются профессиональные знания и прокачиваются навыки коммуникации.

Правила создания чистого кода

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

Так, чтобы всегда было понятно, что они хранят, обозначают или делают. 

Избегайте слишком коротких и неговорящих названий. 

Пример:

  • Плохо: a1 или cnt. // Вам что, символов жалко?
  • Нормально: count
  • Хорошо: letters_count etc // Cразу ясно, что вы собрались посчитать. 

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

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

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

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

Запомните: чем больше и чаще копируете код, тем больше времени тратите.

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

Как это сделать:

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

Инкапсулируйте примитивные типы

Примитивные типы — это int, string, bool. Довольно часто, особенно в случае с boolean, лучше инкапсулировать примитивный тип. Если этого не делать, по сигнатуре функции будет сложнее понять, что же она делает. А значит, можно легко ошибиться. Например, когда функция возвращает bool, не всегда понятно, что обозначает false — ошибку или отрицательный результат.

На курсах Skypro, например «Java-разработчик», преподают опытные разработчики, которые не раз сталкивались с ошибками новичков. Поэтому преподаватели делятся не только знаниями и навыками, которые нужны начинающему разработчику, но и лайфхаками из практики.

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

Например:

Чтобы избежать вышеупомянутых ошибок, можно обернуть/заменить примитивные типы на специальные типы, например enum.

Пример:

  • Плохо: function getResultFromState(int state) : bool.
  • Хорошо: function getResultFromState(State state) : Result / enum State {IDLE = 1, DONE = 2}, enum Result {SUCCESS = ‘success’, FAIL = ‘fail’}.

Минимизируйте уровни вложенности

Каждый уровень вложенности делает код более трудным для чтения и отладки. Особенно это заметно, когда в коде много вложенных if или циклов. Очень легко ошибиться и не заметить какое-то условие.

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

Чтобы код смотрелся еще чище, можно избавиться от else с помощью early return.

Используйте небольшие классы и методы

Чем короче функция, тем легче ее читать и отлаживать. То же самое с классами, в которых десятки методов: невозможно быстро разобраться, что там происходит.

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

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

Минимизируйте количество аргументов функции

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

А если нужно десять аргументов для функции в 15–20 строк, то делайте так:

— оберните несколько элементов в структуру;

— или получите нужные значения внутри функции, передав id как аргумент и сделав запрос в базу данных внутри функции.

Дополнительные действия для чистоты кода

Пользуйтесь интегрированной средой разработки

Множество компаний разрабатывают крутой софт, который помогает ловить ошибки.
Например, Jetbrains создала IntellIJ Idea для разработки на Java и Kotlin — и еще серию продуктов PyCharm и CLion для других языков программирования. Microsoft создала Visual Studio code, и так далее.

Чтобы обращать внимание на предупреждения “warnings”, вы можете настроить linter.

Запрашивайте код-ревью

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

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

Студенты курсов Skypro, например «Веб-разработчик», могут попросить код-ревью у одногруппников. А домашки на первых порах представляют собой код-ревью от преподавателя. Так студенты учатся не только писать код без ошибок, но и находить ошибки в коде других разработчиков.

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

Анализируйте решения и ошибки

Ошибиться — не страшно. Гораздо хуже совершать одну и ту же ошибку снова и снова. Анализируйте решения и ошибки после каждого код-ревью.

Выпишите себе небольшой список правил или изменений, которые хотите применить. Например, хотите минимизировать вложенность. Так и пишите: «минимизировать вложенность». И теперь каждый раз проверяйте свой код на наличие вложенных if и циклов. Рефлексируйте после каждого код-ревью, чтобы не допускать одинаковых ошибок.

Читайте документацию

Это сильно упростит вам жизнь. Если будете знать, как работает библиотечная функция или конструкция языка, сможете ее оптимально использовать.

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

Коротко о главном

  • Помните: вы будете читать ваш код и ваш код будут читать другие люди. Поэтому, когда пишете код, думайте о том, насколько легко его читать, понимать, редактировать и искать в нём ошибки. 
  • Старайтесь выделять код в небольшие функции и классы, понятно называть переменные, использовать как можно меньше уровней вложенности. 
  • Смело используйте код-ревью: взгляд со стороны укажет на ошибки, которые сами не увидите. 
  • Не забывайте: люди начинают писать чистый код не за один день. Это процесс работы над собой. У кого-то получается быстрее, у кого-то медленнее. Однако все, кто захотел, так или иначе начинают писать чистый код.

Подборка литературы по теме

  1. «Чистый код. Создание, анализ и рефакторинг», Роберт Мартин.
  2. «Рефакторинг. Улучшение существующего кода», Мартин Фаулер.
  3. «Совершенный код», Стив Макконнелл.
  4. «Шесть советов по написанию более понятного программного кода», Джефф Вогел.

Содержание

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

Выиграть iPhone 15