Pergunta

Considere o seguinte exemplo artificial:

void HandleThat() { ... }

void HandleThis()
{
    if (That) return HandleThat();
    ...
}

Esse código funciona muito bem, e estou bastante certeza de que é especificação-válido, mas eu (talvez por conta própria) considerar este estilo incomum, uma vez que a chamada aparece para retornar o resultado da função, apesar do fato de que tanto funções são um protótipo para ser vaga.

Normalmente, eu esperaria ver:

if (That) {HandleThat(); return;}

que, sinto, não deixa ambiguidade quanto ao que está acontecendo.

SO comunidade, posso obter a sua opinião sobre se o estilo voltando-vazio de codificação é confuso ou problemático? Ele tem a sensação de um idioma; Devo usar este ou evitá-lo?

Geralmente eu lutar por clareza e usar o segundo estilo. Por outro lado, há uma limpeza para a primeira forma que me atrai a ele um pouco.

Foi útil?

Solução

Eu concordo com você, o primeiro estilo é confuso porque há a implicação de que algum tipo de valor está sendo retornado. Na verdade, tive de lê-lo mais algumas vezes , porque do que isso.

Ao retornar de uma função protótipo vazio, deve ser apenas de retorno;

Outras dicas

Este é provavelmente apenas um pouco demasiado inteligente. Se essa linha acaba por mais de um par de linhas de distância do topo da função, ele vai ser confuso. Isso também significa que o programador olhando para o código terá de correlacionar o

return HandleThat();

com o tipo de retorno void e descobrir a inteligência antes que eles realmente entender o código. Quando você está fazendo mais de uma coisa em um ramo de if / else, você deve realmente usar o aparelho e colocar os passos em linhas diferentes. Ocupa mais espaço, mas é mais fácil de entender:

if (That) {
    HandleThat();
    return;
}

As regras de linguagem C dizer se uma função declarada como retornando tentativas vazios para retornar uma expressão, a expressão não será avaliada.

http://c0x.coding-guidelines.com/6.8.6.4.html

Nunca vi isso antes.

Tem a vantagem de olhar como um idioma comum para tipos de retorno não-vazios, para que ele lê muito facilmente ...

Eu não iria mudá-lo a menos que alguém pode mostrar que é inválido.

Eu acredito que a primeira versão é principalmente permitido para facilitar a programação do modelo. Se HandleThat retornou um tipo T, que pode ou não ser nulo, é conveniente utilizar a primeira versão.

Mas em casos "normais", a segunda versão é mais clara e eu prefiro isso.

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