Антипаттерн стрелка

Flattening Arrow Code - код в виде стрелки, является примером того, как не надо писать код (см. Arrow Anti-Pattern ), демонстрация:

if
  if
    if
      if
        do something
      endif
    endif
  endif
endif
Code Style - как не надо писать код

Давайте рассмотрим реальный пример.

Плохой код (многие из нас так и пишут):

function isCorrect($param1, $param2, $param3)
{
    if ($param1 !== $param2) {
        if ($param1 === ($param3 * 2)) {
            if ($param2 === ($param3 / 3)) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    } else {
        return false;
    }
    return false;
}

Хороший код (Multiple Returns):

function isCorrect($param1, $param2, $param3)
{
    if ($param1 === $param2)       { return false; }
    if ($param1 !== ($param3 * 2)) { return false; }
    if ($param2 !== ($param3 / 3)) { return false; }
    return true;
}

Отличный код (принцип SESE - Single Entry, Single Exit):

function isEqual($param1, $param2)
{
    return $param1 === $param2;
}

function isDouble($param1, $param2)
{
    return $param1 === ($param2 * 2);
}

function isThird($param1, $param2)
{
    return $param1 === ($param2 / 3);
}

function isCorrect($param1, $param2, $param3)
{
    return !isEqual($param1, $param2)
        && isDouble($param1, $param3)
        && isThird($param2, $param3);
}

Конечно, это немного дольше, но таким образом:

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

Источник: 1 - 2 - 3 - 4 - 5 - 6


02.10.2017 06:44