В конце месяца совместно с Garage Eight и Live PHP делаем митап в Санкт-Петербурге. Регистрация откроется через неделю.
В числе спикеров отчаянный борец против
null — Владимир Романичев.Вчера мы прогоняли его доклад, а сегодня я кидаю вам пример рефакторинга своего кода...
Было
final class Context
{
/**
* @var array<non-empty-lowercase-string, Name>
*/
private array $uses = [];
public function __construct(
public readonly ?Name $namespace = null,
) {}
public function use(Name $name, ?Name $as = null): self
{
$context = clone $this;
$context->uses[($as ?? $name->last())->toLowercaseString()] = $name;
return $context;
}
}
Стало
final class Context
{
// ...
public function use(Name $name): self
{
return $this->useAs($name, $name->last());
}
public function useAs(Name $name, Name $as): self
{
$context = clone $this;
$context->uses[$as->toLowercaseString()] = $name;
return $context;
}
}
Я не считаю
null абсолютным злом, тем более, что в PHP он явный, но иногда действительно можно сделать красивее без него.