Estilo de codificação: Função e Procedimentos Coding Standard
-
21-09-2019 - |
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.
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.