Стиль кодирования: стандарт кодирования функций и процедур
Глава 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.