Подведу итоги прений.
Однозначного ответа конечно же нет, есть ±, компромиссы и предпочтения 🤪
Вариант с передачей по ссылке:
➕ немногословный;
➕ менее затратный по ресурсам;
➖ вызов
➖ передача по ссылке — побочный эффект для контекста вызывающей функции.
Вариант с возвращением кортежа:
➖ более многословный (хотя выглядит все равно опрятно);
➖ потребует дополнительную память на массив (но разговоры про это пахнут нанооптимизацией);
➕ строка
➕ передача значений копированием оставляет нам шанс написать чистый (pure) метод.
Ещё было предложено возвращать объект, но это, по сути, частный случай второго варианта. Персональный тип для результата приватного метода избыточен, с
Всем спасибо за обсуждение!
Я выбираю второй вариант с кортежем, так как поддерживаемость и прозрачный control flow перевешивают 😉
Однозначного ответа конечно же нет, есть ±, компромиссы и предпочтения 🤪
Вариант с передачей по ссылке:
➕ немногословный;
➕ менее затратный по ресурсам;
➖ вызов
$this->processByReference($value1, $value2)
при чтении не выглядит как мутация переменных, это затрудняет ревью и поддержку;➖ передача по ссылке — побочный эффект для контекста вызывающей функции.
Вариант с возвращением кортежа:
➖ более многословный (хотя выглядит все равно опрятно);
➖ потребует дополнительную память на массив (но разговоры про это пахнут нанооптимизацией);
➕ строка
[$value1, $value2] = $this->processAndReturnTuplet($value1, $value2)
говорит сама за себя — я преобразую значения этих переменных;➕ передача значений копированием оставляет нам шанс написать чистый (pure) метод.
Ещё было предложено возвращать объект, но это, по сути, частный случай второго варианта. Персональный тип для результата приватного метода избыточен, с
@psam-return array{string, int}
Psalm и без него отловит все ошибки.Всем спасибо за обсуждение!
Я выбираю второй вариант с кортежем, так как поддерживаемость и прозрачный control flow перевешивают 😉