Улучшите свои НАВЫКИ кодирования с помощью этих нескольких советов. Начните программировать как профессионал.

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

Хотите стать профессиональным разработчиком? Начните с этих рекомендаций, желательно сразу. Давайте сразу к ним:

Код для интерфейсов, а не реализации

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

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

Изначально я ими не пользовался, потому что не видел в них никакой пользы. Только сравнительно недавно я оценил их значимость в системах, которые разрабатываю.

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

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

Возможно, через год на рынке появится более качественный инструмент конвертации. Вместо нескольких (или дюжины) мест в коде, где вы генерируете файлы PDF, изменить можно будет только одно место!

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



Избегайте наследования

Этот принцип напрямую связан с рекомендацией использовать описанные выше интерфейсы.

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

Однако по опыту знаю, что позже это заканчивается проблемами. Это известно как технологический долг.

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



Прекратите использовать «extends в PHP
Используете ли вы абстрактные классы или классы-расширения в коде своего домена? Надеюсь, с этого дня вы перестанете это делать…blog.devgenius.io»



Есть поговорка: «программируйте интерфейсы, а не реализации». Вам нужен новый функционал? Ни при каких обстоятельствах вы не должны начинать с абстрактного класса!

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

Введите переменные подсказки

Используете ли вы doc-блоки, чтобы подсказать IDE о типе переменной? Если нет, то рекомендую начать. PHP является интерпретируемым языком, тип переменной может измениться во время выполнения кода.

Хотя механизм PHP может не иметь проблем с исполняемым кодом, ваш редактор кода может не знать, какие данные содержит переменная. Это объект класса User? Или, может быть, «false» или «null».

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

Подсказки типов жизненно важны, если вы собираетесь реализовать директиву strict_types в своем коде. Если вы еще не знаете, что это за директива, рекомендую прочитать мою последнюю публикацию на эту тему:



Принять разделение команд и запросов

Этот принцип, придуманный Бертраном Мейером, полезен для построения функций класса (или методов) или конечных точек API.

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

Команда — это функция, которая каким-либо образом изменяет состояние (например, deleteUser, removeFile, sendEmail), а запрос — это функция, которая возвращает что-либо (например, findUser, getOwner, findAll, findOneBy).

Например, вместо одной функции «deleteUsersAndFindAllActive» было бы разумнее использовать две отдельные функции «deleteUsers» и «findAllActiveUsers».

Очевидным преимуществом является то, что код чище и его легче поддерживать. Другое преимущество заключается в том, что вызываемый вами запрос безопасен для выполнения и не вызывает неожиданных побочных эффектов.

Избегайте больших кусков кода

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

Вы слышали о понятии цикломатическая сложность? Этот термин, введенный почти 50 лет назад, используется для определения сложности алгоритмов.

Он определяет количество уникальных путей, по которым может разветвляться ваша программа. Каждое «если» в коде приводит к двум способам выполнения кода. Еще одно «если» дает четыре возможности, три «если» дают восемь возможностей (цикломатическая сложность = 8) и так далее.

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

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

Начните использовать strict_types

Начните свой код с «declare (strict_types = 1)». Эта директива указывает интерпретатору PHP проверять тип переменных, передаваемых в функцию (и из нее).

Если функция принимает только int в качестве входного параметра, попытка передать строковый тип приведет к исключению. То же самое, если функция объявляет строку на выходе, попытка вернуть целое число приведет к исключению.

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

Непревзойденным преимуществом является раннее обнаружение ошибок еще на этапе разработки. Эта директива предотвращает появление ошибок до того, как код достигнет стадии производства!

Без этой директивы вы можете столкнуться с тонкими ошибками на этапе выполнения кода. Что, если вы передадите число с плавающей запятой "3,1415" функции, которая принимает только целое число? PHP выполнит преобразование типов — вместо "3.1415" вы получите "3". Если вы передаете строковую переменную со значением "13-й этаж", вы получите "13". (Подробнее о жонглировании шрифтами)

Имейте в виду, что это объявление применяется там, где выполняется код. Если вы используете класс, в котором объявлены strict_types, и в месте его вызова не объявлена ​​директива, strict_types будет неактивна.

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

Позвольте предложить еще одну публикацию на strict_types, где вы найдете больше полезной информации по теме:



Принять стиль кода PSR-12

Работа профессионального программиста заключается в сотрудничестве. Нравится вам это или нет, но рано или поздно (если не уже) вы будете программировать вместе с другими программистами.

Согласованный, повторяющийся код — основа совместной работы. Вы слышали о стандартах PSR?

Текущим стандартом форматирования, широко принятым сообществом PHP, является PSR-12 «Расширенный стиль кодирования».

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

Придерживаться стандарта помогает хорошая IDE, такая как PHPStorm (которой я пользуюсь более 10 лет).

Применяйте методы чистого кода

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

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

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

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

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