Чистый код: 10 советов хорошего нейминга
В этой статье мы затронем один из самых простых, но в то же время наиболее важных навыков в программировании. Ведь именно грамотное именование кода позволяет говорить о его качестве.
Существует четыре главных фактора, которые отличают хороший код от плохого: читаемость, изменяемость, безопасность и производительность. Первые три — тесно связаны, и главным среди них является именно читаемость.
Ведь читаемость это фундамент, без которого ничего не получится.
Почему читаемость так важна
Когда речь заходит о читаемости, первыми на ум приходят различные идентификаторы: классы, поля, методы, константы.
Грамотно названный идентификатор делает код читабельнее, если прямо отвечает на вопрос «что это такое?». Это здорово помогает, если вы возвращаетесь к проекту спустя несколько месяцев, совершенно не помня его суть.
Также от читаемости кода зависит, сразу ли вольется новый разработчик в проект или будет долго разбираться, а потом напишет такой же грязный код.
Примеров множество.
Десять главных советов по неймингу
- Избегайте неинформативных имен
Имена должны помогать человеку, читающему код, сразу понимать, за что отвечает та или иная сущность.
Например, вам требуется описать число максимальных попыток при авторизации. В таком случае не стоит называть идентификатор max или attempts. И тем более a или m.
Лучшим вариантом будет что-то в духе maxAttempts.
- Избегайте абстрактных имен
Избегайте имен, которые могут интерпретироваться по-разному или сбивать с толку из-за своей обобщенности.
Например, data или info мало что говорят о содержимом, скрывающемся за ними.
- Соблюдайте длину имени, полагаясь на время жизни сущности
Используйте короткие имена для маленьких локальных переменных, а более длинные и описательные имена — для переменных с долгим временем жизни или широкой областью видимости.
Например, перебирая коллекцию изображений, позволительно использовать имя image, но не рекомендуется держать подобную сущность где-то вне контекста.
- Использование предметной области
Имена должны отражать термины предметной области, для которой написан код. Это делает код более понятным в контексте проекта.
Например, можно использовать бухгалтерские термины по типу ИНН или НДС (tin и vat) вместо неочевидных insurerIdNumber или inderectTax.
- Избегайте магических чисел
Заведите константы, параметры среды или замените числа на строки, где это уместно. Это повысит читаемость, продуктивность и сократит ошибки.
- Избегайте отрицаний
Это имена по типу isNotClient и isIncomplete. Количество таких имен необходимо минимизировать, а лучше исключить совсем.
В противном случае, при чтении кода разработчику мысленно придется выполнять двойную работу: вспоминать действительное значение сущности и сопоставлять его с отрицаемой.
- Используйте легко произносимые имена
Если вам с трудом удается произнести имя метода, то вряд ли вы сможете свободно говорить о нем с другими разработчиками. Важно учитывать этот момент, так как обсуждение кода является неотъемлемой частью программирования.
- Не используйте слова, зарезервированные языком программирования
К таким словам относятся имена базовых типов, классов и операторов.
Например, в языке Python можно «затенить» любые ключевые сущности, такие как, к примеру, range или list, и тем самым сильно усложнить дальнейшую работу.
- Используйте стандартизированный нейминг для времени
Если нужно хранить время какого-либо события, используйте глагол в прошедшем времени с суффиксом At: deletedAt, publishedAt.
Так вы сможете быстро отличать такие сущности от прочих.
- Согласуйте со своей командой правила именования
Используйте одни и те же схемы именования во всем вашем проекте. Это упрощает понимание кода новыми разработчиками и помогает в его поддержке.
Приведем примеры хорошего и плохого кода
Хороший: Метод класса Product для получения его стоимости getPrice
Пояснение: Короткое и ясное имя, отражающее суть метода
Еще хороший: Пример метода из фреймворка Laravel: Model::firstOrCreate(attrs, values)
Пояснение: Метод возвращает первую найденную модель по переданным атрибутам или создает и возвращает новую по переданным значениям, и это отражено в названии. Встречая вызов этого метода в программе, разработчик сразу понимает, что здесь происходит.
Плохой: Метод uploadArrayImage(models, collection_name, nameColumn, review)
Что не так: Совершенно неясно, что делает этот метод, если не потратить 15 минут на объяснение. Набор на первый взгляд не связанных друг с другом параметров, смесь стилей нейминга (snake_case и camelCase в параметрах collection_name и nameColumn) и использование отсылки к типу в имени метода. Так писать не надо.
Тоже плохой: Метод класса Salary — calculate()
Что не так: Совершенно неинформативный, хоть и ясно, что подразумевает расчет зарплаты. В тени остается суть: как именно и и с чем этот метод работает.
Подводя итог
Язык определяет мышление — так звучит гипотеза лингвистической относительности. Из этой простой формулировки, в контексте нашей статьи, вытекает тот факт, что чистый и понятный код может колоссально влиять на результат работы.
Хороший код обеспечивает работоспособность и надежность программы, к тому же его достаточно просто поддерживать и развивать. В плохом коде трудно ориентироваться, так как он усложняет масштабирование и увеличивает вероятность появления багов.
Верим, что наши советы помогут вам усвоить и начать применять основные принципы грамотного именования кода!