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

StackOverflow https://stackoverflow.com/questions/1564944

  •  21-09-2019
  •  | 
  •  

Вопрос

Глава 7.6 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.Хотя я не совсем уверен, что это правильный вариант.

Это было полезно?

Решение

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top