É uma boa prática chamar a variável que um método retorna com um nome de variável result
?
Por exemplo:
public Zorglub calculate() {
Zorglub result = [...]
[...]
return result;
}
Ou devo nomeá-lo por seu tipo?
public Zorglub calculate() {
Zorglub zorglub = [...]
[...]
return zorglub;
}
Eu já vi ambos na natureza, se eu precisar escolher um, por que razões poderia me fazer preferir o primeiro ou o último (ou qualquer nome melhor)?
Estou pensando principalmente em Java.
programming-practices
naming
variables
Nicolas Raoul
fonte
fonte
ofTheJedi
usado para esse fim. Não é uma recomendação, apenas dizendo que eu já vi.Zorglub ofTheJedi = //...; return ofTheJedi;
Respostas:
Se essa é uma variável de método, realmente depende da legibilidade.
Como você já tem o nome do tipo na declaração da variável e no tipo de retorno do método, você também pode usá
result
-lo - é descritivo da função da variável.fonte
A leitura cruzada é facilitada se a variável for nomeada
result
. Isso deixa sua intenção clara.fonte
Se eu precisar de uma variável de retorno (o que realmente acontece raramente), eu sempre a chamo
ret
e sempre a defino logo abaixo do cabeçalho da função. A função já tem um nome, que diz tudo sobre o que retorna.Se eu tivesse
myFunction
, poderia nomear sua variável de retornomyFunctionReturnValue
para dizer exatamente a mesma coisa, apenas eu teria que dizê-lo explicitamente todas as vezes. Como as funções geralmente devem ser curtas, não há necessidade de tal explicitação. E mesmo se eu perder o controle, posso pular para a declaração e aterrissar logo abaixo da definição da função.Mas qualquer outro nome, que não indique implicitamente (como
ret
ouresult
) ou explicitamente (comomyFunctionReturnValue
oumyFunctionResult
), que essa é a variável de retorno das funções atuais é muito genérico.No seu segundo exemplo,
zorglub
é uma escolha terrível. Tudo que a declaração realmente diz é que você criou uma variável, cujo nome é igual à anotação de tipo encontrada ao lado do nome. É tão útil quantoint someInt
ouZorglub z
.No seu primeiro exemplo, quando olho para o código, vejo pela primeira vez o nome da função, que me diz que essa função calcula a
Zorglub
. Ao ler a segunda linha, vejo "ok, aqui está o zorglub, que será retornado, mas evidentemente não pode ser retornado imediatamente e, portanto, é armazenado naresult
variável" (como uma observação: se você estiver não vai reatribuir o valor, então é melhor você declarar a variável final para comunicar isso) e, em seguida, penso "agora vamos ver o que acontece antes que seja retornado". Diferentemente do primeiro exemplo, não preciso ler mais nada além disso para saber que essa é a variável, que será retornada e que eu quero seguir no corpo da função se quiser entendê-la.Você pode ler sobre a programação Spartan , que está bastante relacionada à sua pergunta.
fonte
Container
. Se eu tenho um método que modifica a quantidade, posso dizervar container = getContainer(id); container.Quantity += 1;
que certamente é legível se o contexto do método operar apenas em um único contêiner, e isso é tudo o que faz. Chamar issotheContainerWeAreGoingToAdjustTheQuantityOf
é simplesmente ridículo.user
(em oposição auserToJoinThisDepartmentAndManager
Ou o que seria a sua escolha?)returnValue
, masret
é tradicional, assim comoint
echar
.Em seu segundo exemplo, você está confundindo o tipo do resultado com o que é .
só me diz que é um Zorglub, duas vezes. Três vezes se eu me preocupo em ler o tipo de retorno do método. Contudo,
por exemplo, me dá uma pista sobre o que o valor de retorno significa , em termos de semântica do programa. Pode ou não ser mais claro do que apenas chamá-lo
result
, dependendo do tamanho do método - essa é uma chamada de julgamento para cada método IMO.fonte
Se você jogar com muitos objetos Zorglub em seus métodos, você "poderia" cometer um erro e retornar o errado, e / ou você pode ser tentado a nomear os outros
zorglub1
,zorglub2
etc.Se você escolher
result
, não há nenhuma chance de cometer um erro como esse. Além disso, acho que esse é um bom nome; Eu também vireturnedValue
oureturnedObject
várias vezes, também é clara, embora um pouco demorado.fonte
Pessoalmente, não me sinto totalmente confortável usando
result
como nome de variável. É justo dizer que o valor associado é o resultado de alguns cálculos - no entanto, acho que isso é verdade para cerca de (ou mais) 90% das variáveis / campos usados em um programa.Além disso, como várias outras respostas observadas, ele pode ser usado para marcar o valor a ser retornado de um método / função. No entanto, se eu manter meus métodos curtos, focados em fazer apenas uma coisa e permanecer consistentemente em um único nível de abstração, não terei muitas variáveis locais e será trivial ver o que um método retornará.
Portanto, prefiro manter meus métodos curtos e limpos e nomear minhas variáveis para expressar o significado do valor que elas possuem, em vez de sua função local dentro do método envolvente. No entanto, (por exemplo, no código legado)
Zorglub result
pode certamente ser mais fácil de entender do queZorglub zorglub
.fonte
result
porque é o resultado de alguma computação; é chamadoresult
porque é o resultado desse cálculo. Isso também funciona como seu significado IMO, mesmo que não seja o significado mais específico possível. Expressar significado é de ouro, mas a intenção e os idiomas também podem ser valiosos. Nesse caso, é uma espécie de troca.if (result >= 0) numChars+=result; else break;
, e cujo significado será óbvio na computação em questão?) Na minha opinião, o valor que vai ser devolvido a partir desta função deve ser chamadaret
, enquanto o valor que foi retornado da última função chamada deve serresult
. Observe queresult
pode ser mais significativo que um nome mais longo se o valor de retorno da função puder, por exemplo, representar uma quantidade ou um código de erro.result
ou o que o código realmente faz em um nível superior. Eu teria que me referir a onde ele está definido para ver de onde vem seu valor e qual é. Algo comoaddedChars
oumatchedChars
seria mais transparente e ajudar a revelar o que o código está fazendo, e não requerem mentalmente malabarismo esta e as respectivasresult = ...
:)result
e depois compará-lo com esses critérios pareceria mais natural do que tentar criar um nome descritivo que cubra todos eles.ret
vez deresult
parece bem por mim. É um pouco menos claro na minha opinião, porque é abreviado e não como substantivo, mas se for usado de forma consistente, será equivalente aresult
.Eu pessoalmente uso o nome
result
do valor a ser retornado da função / método. Torna explícito que é o valor a ser retornado. Nomear por tipo não parece útil, pois pode haver mais de uma variável desse mesmo tipo.fonte
Qual é a diferença? são apenas duas palavras diferentes que farão a mesma coisa, então o verdadeiro problema é qual parece mais claro para você?
O "resultado" ou "zorglub".
Eu preferiria usar
ZorglubResult
para iniciantes para ver que o resultado éZorglub
mais fácil de comparar com outros resultados que você pode ter e é um resultado como você pode ver.fonte
Não nunca. Isso se chama Systems Hungarian e é trivialmente desatualizado pela idéia de usar um programa que pode exibir o tipo de qualquer variável a qualquer momento que você precisar.
fonte
Sempre que precisar nomear algo no código, forneça nomes descritivos, significativos e legíveis. O caso de uma variável de retorno é um exemplo particularmente bom de onde as pessoas tendem a se tornar complacentes com a nomeação.
Se você tiver uma função claramente nomeada e precisar apenas de uma única linha de código, poderá ignorar completamente a nomeação. Tornar seus métodos objetivos curtos e únicos é sempre o ideal que você deve buscar. Entretanto, às vezes é necessário concluir uma função com várias linhas de código. Nesses casos, é sempre aconselhável nomear sua variável para corresponder ao objetivo de sua função.
Se o objetivo da função é retornar o resultado de um cálculo ou algoritmo de decisão,
result
é um nome perfeitamente adequado para sua variável usar, mas e se sua função estiver retornando um item de uma lista? E se sua função estiver servindo a algum outro propósito que não tem nada a ver com matemática ou listas? Nesses casos, é melhor fornecer à variável um nome significativo relacionado ao motivo pelo qual a função foi criada. Claro, você pode simplesmente usar o resultado, se quiser, porque é um nome que provavelmente não entrará em conflito com outra coisa; no entanto, do ponto de vista da legibilidade, faz mais sentido nomear sua variável de maneira mais significativa e contextual.fonte
Eu gosto de combiná-los, mostra o que é e que ele deve ser devolvido.
então no seu exemplo seria resultZorglub
se o que é realmente não importa, seria apenas resultado (não resultString)
fonte
Não vejo muita diferença entre definir um valor de retorno em algum momento e, em seguida, usar condicionais para ignorar todo o código que pode modificá-lo e
return
imediatamente, por isso, busco o retorno direto, portanto, não háresult
variável.Se você possui um valor intermediário que pode ou não ser alterado por código condicional, ele ainda não é um resultado, portanto, certamente não deve ser nomeado assim.
fonte
Quando eu estava trabalhando em C ++ e acho que isso pode se aplicar em Java.
por exemplo
Este é o projeto por contrato, pois o bloco de garantia deve estar no final do método. Mas o retorno deve ser o último. Tínhamos a regra de que Return result era a única coisa que poderia seguir o bloco de garantia.
fonte
Em uma função recursiva, geralmente é eficaz levar o resultado passo a passo, para otimizar a chamada final. Para sinalizar ao usuário que ele não precisa fornecer um parâmetro, pode ser razoável nomear um parâmetro como "resultado":
Mas, mais frequentemente, uso 'carry' e 'sofar', que já vi na natureza, e que carregam a idéia ainda um pouco melhor, na maioria dos casos.
Um segundo motivo é claro, se o tópico sugerir a palavra '' resultado '', por exemplo, se você fizer uma avaliação aritmética. Você pode analisar a fórmula, substituir variáveis por valores e calcular um resultado no final.
Um terceiro motivo já foi afirmado, mas eu tenho um pequeno desvio: você escreve um método que realiza algum trabalho, digamos que ele avalie uma forma de '' max ''.
Em vez de chamar o resultado '' resultado '', poderíamos chamá-lo de '' max '', mas em alguns idiomas você pode omitir parênteses ao chamar um método, portanto max seria uma chamada recursiva para o próprio método.
Em geral, eu preferiria um nome que diga qual é o resultado. Mas se esse nome já estiver sendo usado, talvez por mais de uma variável, atributo ou método, porque existe um campo da GUI, uma representação de string, um numérico e um para o banco de dados, o uso de outro aumenta a probabilidade de confusão. Em métodos curtos de 3 a 7 linhas, '' resultado '' não deve ser um problema para um nome.
fonte
No Object Pascal, essa não é uma escolha. Você precisa atribuir valor à
Result
variável em algum lugar no código da função.Exemplo:
Então, para mim, é bastante natural ter uma variável "Result" (ou "Retorno", como eu soletro em português para evitar conflito de nome com as palavras reservadas do idioma) para receber um valor de retorno.
É claro que, se for uma expressão muito simples em uma linguagem derivada de C, não me preocuparei em declarar uma variável de resultado - retornando a expressão diretamente.
fonte
não é apenas o nome do resultado (eu sou específico de 'r'), mas também como é usado. por exemplo, se você tiver uma variável de retorno, todas as instruções de retorno deverão retorná-la. não tem 'return r;' no final, mas polvilhe coisas como 'return m * x + b; "por todo o método / função. use" r = m * x + b; return r; "em vez disso.
fonte
resultado está bom. Sou capaz de entender o código à primeira vista, para que o nome da variável atenda ao objetivo.
fonte