Devo *sempre* favorecer variáveis ​​locais digitadas implicitamente em C# 3.0?

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

Pergunta

Reafiador certamente pensa assim, e pronto para uso vai incomodar você para converter

Dooberry dooberry = new Dooberry();

para

var dooberry = new Dooberry();

Esse é realmente considerado o melhor estilo?

Foi útil?

Solução

É claro que é uma questão de estilo, mas concordo com Dare: Declarações de tipo implícitas do C# 3.0:Var ou não var?.Acho que usar var em vez de um tipo explícito torna seu código menos legível. No código a seguir:

var result = GetUserID();

O que é resultado?Um int, uma string, um GUID?Sim, é importante e não, eu não deveria ter que vasculhar o código para saber.É especialmente irritante em exemplos de código.

Jeff escreveu um post sobre isso, dizendo ele favorece var.Mas esse cara é louco!

Estou vendo um padrão de sucesso do stackoverflow:desenterre postagens antigas do CodingHorror e (estilo Jeopardy) formule-as em termos de uma pergunta.

Outras dicas

Eu o uso apenas quando é claramente óbvio o que é var.

claro para mim:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

não está claro para mim:

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

O melhor resumo da resposta que vi para isso é Comentário de Eric Lippert, que essencialmente diz que você deve usar o tipo concreto se for importante qual é o tipo, mas não o contrário.Essencialmente, as informações do tipo devem ser reservadas para locais onde o tipo é importante.

O padrão na minha empresa é usar var em todos os lugares, ao qual chegamos depois lendo várias recomendações e depois gastando algum tempo experimentando para ver se a falta de informações de tipo anotadas foi uma ajuda ou um obstáculo.Sentimos que era uma ajuda.

A maioria das recomendações às quais as pessoas vincularam (por exemplo,Dare’s one) são recomendações feitas por pessoas que nunca tentaram codificar usando var em vez do tipo concreto.Isso torna as recomendações praticamente inúteis, porque elas não falam com base na experiência, estão apenas extrapolando.

O melhor conselho que posso dar é experimentar você mesmo e ver o que funciona para você e sua equipe.

@jongalloway - var não torna necessariamente seu código mais ilegível.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

O primeiro é tão legível quanto o segundo e requer menos trabalho

var myvariable = ResultFromMethod();

aqui, você tem razão, var pode tornar o código menos legível.Eu gosto de var porque se eu mudar um decimal para um duplo, não preciso alterá-lo em vários lugares (e não diga refatorar, às vezes esqueço, deixe-me var!)

EDITAR: acabei de ler o artigo, eu concordo.lol.

Tenho a sensação de que esta será uma das perguntas mais populares feitas ao longo do tempo no Stack Overflow.Tudo se resume à preferência.O que quer que você pense é mais legível.Prefiro var quando o tipo é definido no lado direito porque é mais conciso.Quando atribuo uma variável de uma chamada de método, uso a declaração explícita de tipo.

Houve uma boa discussão sobre isso @ Codificação de terror

Pessoalmente, tento manter seu uso ao mínimo, descobri que prejudica a legibilidade, especialmente ao atribuir uma variável a partir de uma chamada de método.

Uma das vantagens de uma ferramenta como o ReSharper é que você pode escrever o código como quiser e depois reformatá-lo para algo mais fácil de manter.Eu tenho o R# configurado para sempre reformatar de forma que o tipo real em uso fique visível, no entanto, ao escrever código, quase sempre digito 'var'.

Boas ferramentas permitem que você tenha o melhor dos dois mundos.

John.

Só faz sentido quando você não conhece o tipo com antecedência.

O "melhor estilo" é subjetivo e varia dependendo do contexto.

Às vezes é muito mais fácil usar 'var' em vez de digitar um nome de classe extremamente longo ou se você não tiver certeza do tipo de retorno de uma determinada função.Acho que uso 'var' mais quando estou mexendo no Linq ou em declarações de loop for.

Outras vezes, usar o nome completo da classe é mais útil, pois documenta o código melhor do que 'var'.

Sinto que cabe ao desenvolvedor tomar a decisão.Não há bala de prata.Não há "um caminho verdadeiro".

Saúde!

Não, não sempre mas eu iria mais longe e diria muitas vezes.As declarações de tipo não são muito mais úteis do que a notação húngara jamais foi.Você ainda tem o mesmo problema de que os tipos estão sujeitos a alterações e, por mais que as ferramentas de refatoração sejam úteis para isso, não é o ideal comparado a não ter que alterar onde um tipo é especificado, exceto em um único local, que segue o Don't Repeat Yourself princípio.

Qualquer instrução de linha única onde o nome de um tipo pode ser especificado tanto para uma variável quanto para seu valor deve definitivamente usar var, especialmente quando é um longo Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>>

Há um artigo muito bom do MSDN neste tópico e descreve alguns casos em que você não pode usar var:

As seguintes restrições se aplicam a declarações de variáveis ​​digitadas implicitamente:

  • O VAR só pode ser usado quando uma variável local é declarada e inicializada na mesma declaração;A variável não pode ser inicializada para NULL, ou para um grupo de métodos ou uma função anônima.
  • var não pode ser usado em campos no escopo da classe.
  • As variáveis ​​declaradas usando VAR não podem ser usadas na expressão de inicialização.Em outras palavras, essa expressão é legal:int eu = (eu = 20);Mas esta expressão produz um erro de tempo de compilação:var eu = (eu = 20);
  • Várias variáveis ​​implícitas não podem ser inicializadas na mesma declaração.
  • Se um tipo chamado var estiver no escopo, a palavra -chave VAR será resolvida para esse nome de tipo e não será tratada como parte de uma declaração de variável local digitada implicitamente.

Eu recomendaria dar uma olhada para entender todas as implicações do uso de var em seu código.

Estou vendo um padrão para o sucesso do Stackoverflow:Cavar as postagens antigas de codinghorror e o estilo (estilo de Jeopardy) as frase em termos de uma pergunta.

Eu me declaro inocente!Mas você está certo, esta parecia ser uma pequena pergunta relativamente popular.

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