2

Code Complete 2 の Ch 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())

状況によっては読みづらい場合もありますが、それは適切です。

私にとって最高のものはスタイル3です。

于 2009-10-14T08:23:43.987 に答える