Хорошие имена помогают понять код и упрощают его поддержку и развитие.
Например, если вы встретите такие имена в большой области контекста, то не получите понимания о том, что происходит, а после перехода в другой участок кода вам снова придётся вникать в суть переменной или метода, что займёт много времени и сил:
// Переменные ❌
$data;
$var;
$info;
// Методы ❌
$user->run();
$user->handleData();
$user->process();
Старайтесь использовать информативные имена, которые отражают суть того, что они представляют, например:
// Хорошо ✅
$user->latestPosts();
$user->sendEmail(...);
Использование сокращений может показаться удобным для быстрого написания кода, но они могут привести к путанице и усложнить поддержку кода.
Давайте рассмотрим следующий пример:
// Плохо ❌
$usr = User::find($id);
// Хорошо ✅
$currentUser = User::find($userId);
Здесь переменная $usr
представляет объект пользователя. Однако, сокращённое имя $usr
не даёт понимания того, что именно хранится в этой переменной. Более ясное имя, например, $currentUser
, немедленно указывает на её предназначение.
// Плохо ❌
class UsrCtrl extends Controller {
public function f1() {
// ...
}
}
В данном примере имя класса UsrCtrl
не информативно. Разработчику, сталкивающемуся с этим классом впервые, будет трудно понять его назначение. Название класса должно чётко отражать его функциональность, например, ProfileController
.
// Хорошо ✅
class ProfileController extends Controller
{
public function get()
{
// ...
}
}
Теперь давайте рассмотрим пример именования с единицами измерений
// Плохо ❌
// Мы не знаем, что представляет собой число 100
$averageTime = 100;
// Хорошо ✅
// Мы понимаем что значение имеет величину 100мс
$averageTimeInMs = 100;
Другой способ справиться с этим — создать специальные объекты. Представьте, что вам нужно работать с процентами. Что из этого верно?
// Плохо ❌
$percentage = 0.5;
$percentage = 50;
Встретив такую переменную, вы не сможете сказать какое значение ожидает ваше приложение.
Давайте теперь воспользуемся объектом со статическим конструктором, по одному для каждой возможности.
class Percentage
{
public static function fromInt(int $percentage): self
{
return new self($percentage);
}
public static function fromFloat(float $percentage): self
{
return new self($percentage * 100);
}
private function __construct(
public int $value;
) {};
}
Использование класса Percentage
поясняет, что ожидается целое число.
// Хорошо ✅
$percentage = Percentage::fromFloat(0.5);
$percentage = Percentage::fromInt(50);
Помните, что названия должны использовать объясняющие слова, которые помогают понять их назначение. Не стесняйтесь использовать длинные имена, если они ясно описывают сущность. Или html