Pergunta

Se eu tiver algo como um loop ou um conjunto de if / else, e quero retornar um valor de dentro do ninho (veja abaixo), é a melhor maneira de fazer isso para atribuir o valor de um campo ou propriedade e retorno que?

Veja abaixo:

bool b;

public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}

else
{
b = false;
}
return b;
}
Foi útil?

Solução

Sim, isso é bom estilo.

A alternativa (o que seria mau ) seria fazer isso:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}

A razão vários pontos de retorno são considerados como mau estilo é que, especialmente para os métodos maiores, pode ser difícil manter o controle do fluxo de programa dentro de um método porque ele poderia sair em qualquer ponto. Este pode ser um pesadelo para depurar. Se você tem uma variável de retorno que você atribui a no entanto, você pode assistir a essa variável e saber exatamente quando será retornado (a partir de um único local).

Este não é sempre o caso, como em todos os pontos estilística na programação há bons lados para ele e maus lados.

Outras dicas

o que acontece com

return i == 5;

Existem várias opiniões sobre isso. Eu acho que a maioria das pessoas (incluindo eu) tendem a preferir voltar logo que você tem uma resposta e não há mais trabalho a fazer. Algumas pessoas vão argumentar que você só deve voltar na última declaração de um método. No entanto, ele pode realmente tornar as coisas mais complicadas em algumas situações.

Indo por aquilo que eu sugeri, o seu exemplo seria mais curto e mais simples:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

Se b só é usado para calcular o valor de retorno para o seu método, então você deve torná-lo variável local (definido dentro do método).

public bool ifelse(int i)
{
  bool b;
  /*
  Some code to calculate b
  */
  return b;
}

Como já foi sugerido, Se o seu método é simples gostaria de evitar usando uma variável temporária completamente e retornar o resultado assim que ele é conhecido. Uma regra geral seria usar o método que torna o código mais fácil de ler.

Eu diria que se você geralmente deve retornar apenas a partir de um método em dois lugares - perto do início (como em condições de guarda) e perto do fim; Se o método tem qualquer comprimento para isso, você deve usar uma variável temporária como você mencionou, caso contrário as pessoas que lêem o código pode ter mais dificuldade em segui-lo.

Como apontado, tendo mais de uma instrução de retorno tem a desvantagem de encontrá-los fica difícil. OTOH em alguns casos, a lógica adicional necessária para escapar a essa instrução de retorno é pior do que o problema do estilo está resolvendo.

O grande problema que eu estou ciente de re vários retornos é que você pode rapidamente se esqueça de fazer algum processamento de limpeza ou similar em um novo ponto de retorno. IMHO este é tanto um problema com o formulário de devolução única porque o caminho de fuga tem que se lembrar de incluir esse código e nenhum outro código. Uma solução para isso, disponível em algumas linguagens como C #, é o último bloco ou é mais puro formar a escopo declaração como demonstrado aqui . (OK eu vou chegar a minha caixa de sabão agora)

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