Возвращение рано из функции более элегантно, чем оператор if? - PullRequest
16 голосов
/ 10 декабря 2008

У меня и у коллеги есть спор о том, что из следующего является более изящным. Я не буду говорить, кто есть кто, так что это беспристрастно. Что изящнее?

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone != target)
            {
                _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
                _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
                _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);

                _hitZone = target;

                _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
                _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
                _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);
            }
        }

... или ...

public function set hitZone(target:DisplayObject):void
        {
            if(_hitZone == target)return;

            _hitZone.removeEventListener(MouseEvent.ROLL_OVER, onBtOver);
            _hitZone.removeEventListener(MouseEvent.ROLL_OUT, onBtOut);
            _hitZone.removeEventListener(MouseEvent.MOUSE_DOWN, onBtDown);

            _hitZone = target;

            _hitZone.addEventListener(MouseEvent.ROLL_OVER, onBtOver, false, 0, true);
            _hitZone.addEventListener(MouseEvent.ROLL_OUT, onBtOut, false, 0, true);
            _hitZone.addEventListener(MouseEvent.MOUSE_DOWN, onBtDown, false, 0, true);

        }

Ответы [ 14 ]

0 голосов
/ 10 декабря 2008

Я предпочитаю избегать немедленного возврата в начале функции и, по возможности, ставить соответствующую логику, чтобы предотвратить вход в метод до его вызова. Конечно, это зависит от цели метода.

Однако я не возражаю возвращаться к середине метода, при условии, что метод короткий и читаемый. В случае, если метод большой, по моему мнению, он уже не очень читабелен, поэтому он либо будет реорганизован в несколько функций со встроенными возвратами, либо я явно выйду из структуры управления с единственным возвратом в конце.

0 голосов
/ 10 декабря 2008

Вариант 1 лучше, потому что вы должны иметь минимальное количество точек возврата в процедуре. Есть исключения вроде

  if (a) {
    return x;
  }
  return y;

из-за того, как работает язык, но в целом лучше иметь как можно меньше точек выхода.

0 голосов
/ 10 декабря 2008

вариант 2 более читабелен, но управляемость кода не работает, когда может потребоваться добавить еще.

Так что, если вы уверены, что для варианта 2 больше нет выбора, но если есть возможность для условия else, я бы предпочел вариант 1

0 голосов
/ 10 декабря 2008

В этом случае (один тест, без другого условия) мне нравится тест и возврат. Это дает понять, что в этом случае ничего не нужно делать, не читая остальную часть функции.

Однако, это расщепление лучших волосков. Я уверен, что у вас должны быть более серьезные проблемы:)

...