Pergunta

Ch 7.6 do código completo 2 está me confundindo, anexei algum código de amostra (no PHP) me dizendo qual estilo é o melhor? ou sugerir algo melhor? obrigado

Estilo 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;
}

Estilo 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;
}

Estilo 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;
}

Atualmente, estou usando o estilo 1. Embora não tenha certeza se é o certo.

Foi útil?

Solução

Não quero parecer muito rude, mas não gosto de ninguém dos 3 estilos propostos. Se estou checando as condições que impedem a execução de uma função, sempre vou ficar com esse estilo. No geral:

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

    if ($guard_condition2)
        return $failure;

    do_action();
    return $success;
}

Então, eu reescreveria seu código como seguinte:

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);
}

De qualquer forma, se você precisar de uma opinião sobre o que propôs, eu votaria no Style 3.

Outras dicas

No estilo 1 "se" e "else" se "é usado em condições diferentes, por isso não faz sentido.

Em estilo 2 linhas:

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

são muito difíceis de ler em algumas situações, mas é adequado.

Para mim, o melhor é o estilo 3.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top