Стиль кодирования: стандарт кодирования функций и процедур

Глава 7, Code Complete 2, сбивает меня с толку, я приложил пример кода (в php), в котором говорится, какой стиль лучше? или предложить что-нибудь получше? Спасибо

Стиль 1

public function register($user, $pass) {
 if($this->model->isRegistered($user)
 {
  return false;
 }
 else if($this->twitter->login($user, $pass))
 {
  return $this->model->addUser($user, $pass);
 }

 return false;
}

Стиль 2

public function register($user, $pass) {
 if($this->model->isRegistered($user)
 {
  return false;
 }

 $this->twitter->login($user, $pass);
 if($this->twitter->isLoggedIn())
 {
  return $this-model->addUser($user, $pass);
 }

 return false;
}

Стиль 3

public function register($user, $pass) {
 if($this->model->isRegistered($user)
 {
  return false;
 }

 $status = $this->twitter->login($user, $pass);
 if($status)
 {
  return $this->model->addUser($user, $pass);
 }

 return false;
}

В настоящее время я использую Стиль 1. Хотя я не совсем уверен, правильный ли он.

2 ответа

Решение

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

function action()
{
    if ($guard_condition1)
        return $failure;

    if ($guard_condition2)
        return $failure;

    do_action();
    return $success;
}

Поэтому я бы переписал ваш код следующим образом:

public function register($user, $pass)
{
    if ($this->model->isRegistered($user))
        return false;

    if (!$this->twitter->login($user, $pass))
        return false;

    return $this->model->addUser($user, $pass);
}

В любом случае, если вам нужно мнение о том, что вы предложили, я бы проголосовал за стиль 3.

В стиле 1 "if" и "else if" используются в разных условиях, поэтому это не имеет смысла.

В стиле 2 строки:

 $this->twitter->login($user, $pass);
 if($this->twitter->isLoggedIn())

слишком трудно читать в некоторых ситуациях, но это правильно.

Для меня самый лучший стиль 3.

Другие вопросы по тегам