2

Code Complete 2 的第 7.6 章让我很困惑,我附上了一些示例代码(在 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。虽然我不太确定它是否正确。

4

2 回答 2

3

我不想听起来太粗鲁,但我不喜欢 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。

于 2009-10-14T16:45:51.947 回答
2

在样式 1 中,“if”和“else if”用于不同的条件,因此没有意义。

在样式 2 行中:

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

在某些情况下很难阅读,但这是正确的。

对我来说最好的是Style 3。

于 2009-10-14T08:23:43.987 回答