New_Horizons
@New_Horizons
Бред:

Конструкция if или switch?

Вопрос простой и тупой. Два варианта одного и того же кода. Как бы вы написали и почему? Названия методов и переменных значения не имеют.

if (
	$this->inComplete($oldStatus, $newStatus) ||
	$this->outComplete($oldStatus, $newStatus)
) {
	$this->action();
	$this->save();
}


switch (true) {
	case ($this->inComplete($oldStatus, $newStatus)):
	case ($this->outComplete($oldStatus, $newStatus)):
		$this->action();
		$this->save();
}
  • Вопрос задан
  • 1139 просмотров
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev
software engineer
в данном конкретном случае switch явно не нужен.
switch Нужен когда у вас есть переменная, которую вы хотите сравнить с разными значениями и в зависимости от этого делать разные действия. А вы в качестве условия switch вообще true пишете, и case без завершения - это с точки зрения читабельности, очень неявный OR.
Ответ написан
FanatPHP
@FanatPHP
Помогаю и новичкам, и старичкам
Второй вариант это хорошая попытка, но недостаточно полно реализованная. Писать надо хотя бы так

(function() { 
    foreach([true] as $condition) {
        $condition = ($condition) ? true : false; 
        while ($condition) {
            switch (true) {
                case ($this->inComplete(($oldStatus), ($newStatus))):
                case ($this->outComplete(($oldStatus), ($newStatus))):
                    ($this->action());
                    ($this->save());
            }
            break;
        }
    }
})();

В общем, перед тем как задавать вопрос на тостере, надо сесть и хорошенько сначала самому подумать, каких бессмысленных операторов можно добавить в код, кроме switch.
Ответ написан
gscraft
@gscraft
Программист, философ
Это больше предмет для споров, чем возможность получить ответ. Лично я предпочитаю if, как более гибкую структуру (можно уйти во вложенность, можно группировать на разных условиях), плюс, опыт одного небезызвестного языка, где switch отсутствует в принципе. Но в switch нет антипаттерна. Скорее, важно другое: если гармошка и, тем более, вложенность условий велики и условия не являются тривиальным перебором простых случаев, есть повод задуматься над рефакторингом. Впрочем, в этом смысле switch располагает к более линейно-очевидному коду.
Ответ написан
pOmelchenko
@pOmelchenko
php-developer
If в котором бы вызывал один метод обертку возвращающий bool значение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы