Variáveis do tipo implícito (Implicitly Typed Variables) [C#]

Tempo de leitura: 4 min

Escrito por Celso Kitamura
em 31 de janeiro de 2017

Entre para o Grupo VIP e fique sabendo antes das novidades

Junte-se à nossa comunidade de App Devs que estão transformando o mundo

100% livre de spam.

Compartilhe agora mesmo:

Variáveis do tipo implícito (Implicitly Typed Variables) [C#]

Variáveis locais podem ser declaradas com o “tipovar ao invés de um tipo explícito. São as variáveis do tipo implícito. A palavra chave var instrui o compilador para inferir o tipo da variável resultante da expressão do lado direito da instrução de inicialização. O tipo da variável inferida pode ser um tipo primitivo, um tipo anônimo, um tipo definido pelo usuário ou um tipo definido pela biblioteca de classes do .NET Framework.

 

Variáveis do tipo implícito

Os exemplos seguintes mostram várias maneiras de se declarar variáveis do tipo implícito com a palavra chave var:

// i será compilada como um inteiro
var i = 5;

// s será compilada como uma string
var s = "Hello";

// a será compilada como um int[]
var a = new[] { 0, 1, 2 };

// expr será compilada como IEnumerable<Customer>
// ou talvez IQueryable<Customer>
var expr =
    from c in clientes
    where c.Cidade == "Campinas"
    select c;

// anon será compilada como tipo anônimo
var anon = new { Nome = "João", Idade = 50 };

// lista será compilada como List<int>
var lista = new List<int>();

 

É importante entender que a palavra chave var não significa “variante”, tampouco indica que a variável é “tipada“ tardiamente. Apenas significa que o compilador determina e atribui o tipo mais apropriado.

A palavra chave var pode ser utilizada nos seguintes contextos:

  • Em variáveis locais (variáveis declaradas no escopo do método) como visto no exemplo anterior;
  • Na inicialização de uma estrutura for.

 

for(var x = 1; x < 10; x++)

 

  • Na inicialização de uma estrutura foreach;

 

foreach(var item in lista){...}

 

  • Na instrução using;

 

using (var arquivo = new StreamReader("C:\\meuarquivo.txt")) {...}

 

var e tipos anônimos

Em muitos casos o uso de var é opcional e apenas uma conveniência de sintaxe. Entretanto, quando uma variável é inicializada com um tipo anônimo você deve declarar a variável com var se precisar acessar as propriedades do objeto depois. Este é um cenário comum em expressões de pesquisas LINQ.

Da perspectiva do código fonte, um tipo anônimo não tem nome. Entretanto, se uma variável de pesquisa foi inicializada com var, a única maneira de acessar propriedades numa sequência de objetos retornada é usar o tipo var na variável de iteração da instrução foreach.

 

            class TiposImpicitosLocais
            {
                static void Main()
                {
                    string[] palavras = { "nUVEm", "EsCaDa", "ParaLELEpiPEdO" };
                    // Se uma pesquisa resulta numa sequência de tipos anônimos,
                    // utilize var na estrutura foreach para poder acessar as propriedades.
                    var palavrasMinusculasMaiusculas =
                         from p in palavras
                         select new { Maiuscula = w.ToUpper(), Minuscula = w.ToLower() };

                    // Executando a pesquisa
                    foreach (var pmm in palavrasMinusculasMaiusculas)
                    {
                        Console.WriteLine("Maiúsculas: {0}, Minúsculas: {1}", pmm.Maiuscula, pmm.Minuscula);
                    }
                }
            }

            /* Saída:
                Maiúsculas: NUVEM, Minúsculas: nuvem
                Maiúsculas: ESCADA, Minúsculas: escada
                Maiúsculas: PARALELEPIPEDO, Minúsculas: paralelepipedo
             */

 

Observações

Declarações de variáveis do tipo implícito possuem algumas restrições, que veremos a seguir.

Var pode apenas ser utilizada quando uma variável local é declarada e inicializada na mesma instrução; a variável não pode ser inicializada com nulo ou para um grupo de métodos ou uma função anônima.

Var não pode ser utilizada em campos no escopo da classe.

Variáveis declaradas com var não podem ser utilizadas na inicialização de uma expressão. Em outras palavras, a expressão abaixo é válida:

int i = (i = 20);

mas esta provoca um erro em tempo de compilação:

var i = (i = 20);

Múltiplas variáveis implicitamente “tipadas” não podem ser inicializadas na mesma instrução.

Var também é útil em expressões de pesquisa onde seja difícil de determinar o tipo exato da variável. Isto pode ocorrer com operações de agrupamento e ordenação.

Podemos usar var quando especificar o tipo da variável for trabalhoso ou óbvio demais, ou ainda quando não ajuda a melhorar a leitura do código. Um exemplo onde var ajuda desta maneira são nos tipos aninhados de tipos genéricos como a utilizada em operações de grupo. Veja abaixo uma pesquisa onde o tipo é

IEnumerable<IGrouping<string, Estudante>>

Enquanto você e outros que farão a manutenção do código entenderem isso, não há problema em usar tipos implícitos por conveniência e para ser breve.

 

           // Como no exemplo anterior, exceto pelo fato de usarmos o ultimo nome como chave.
           // Pesquisa é um IEnumerable<IGrouping<string, Estudante>>
            var pesquisaEstudante3 =
                from estudante in estudantes
                group estudante by estudante.Last;

 

Palavras finais

Declarar variáveis do tipo implícito com a palavra chave var indica ao compilador que ele deve inferir que o tipo a ser utilizado na variável será o resultado da expressão do lado direito do sinal de atribuição = (igual).

Var não quer dizer variante. Devemos sempre inicializar uma variável deste tipo.

Entretanto o uso de var tem potencial de deixar seu código mais difícil de ler por outros desenvolvedores. Por esta razão, a documentação C# normalmente utiliza var somente quando necessário.

E para receber um aviso quando os próximos artigos forem publicados, se cadastre na lista VIP do Celso.

Compartilhe agora mesmo:

Comece pelo e-book GRATUITO (Por Tempo Limitado)

Crie Sua Primeira Skill Alexa

Se você não sabe por onde começar, este e-book te mostra o passo a passo para criar sua primeira skill Alexa.

QUERO CRIAR SKILLS PARA ALEXA!
100% livre de spam.

Você vai gostar também:

Para enviar seu comentário, preencha os campos abaixo:

Deixe uma resposta


*


*


Seja o primeiro a comentar!

Entre para o Grupo VIP e fique sabendo antes das novidades

Junte-se à nossa comunidade de App Devs que estão transformando o mundo

100% livre de spam.

Damos valor à sua privacidade

Nós e os nossos parceiros armazenamos ou acedemos a informações dos dispositivos, tais como cookies, e processamos dados pessoais, tais como identificadores exclusivos e informações padrão enviadas pelos dispositivos, para as finalidades descritas abaixo. Poderá clicar para consentir o processamento por nossa parte e pela parte dos nossos parceiros para tais finalidades. Em alternativa, poderá clicar para recusar o consentimento, ou aceder a informações mais pormenorizadas e alterar as suas preferências antes de dar consentimento. As suas preferências serão aplicadas apenas a este website.

Cookies estritamente necessários

Estes cookies são necessários para que o website funcione e não podem ser desligados nos nossos sistemas. Normalmente, eles só são configurados em resposta a ações levadas a cabo por si e que correspondem a uma solicitação de serviços, tais como definir as suas preferências de privacidade, iniciar sessão ou preencher formulários. Pode configurar o seu navegador para bloquear ou alertá-lo(a) sobre esses cookies, mas algumas partes do website não funcionarão. Estes cookies não armazenam qualquer informação pessoal identificável.

Cookies de desempenho

Estes cookies permitem-nos contar visitas e fontes de tráfego, para que possamos medir e melhorar o desempenho do nosso website. Eles ajudam-nos a saber quais são as páginas mais e menos populares e a ver como os visitantes se movimentam pelo website. Todas as informações recolhidas por estes cookies são agregadas e, por conseguinte, anónimas. Se não permitir estes cookies, não saberemos quando visitou o nosso site.

Cookies de funcionalidade

Estes cookies permitem que o site forneça uma funcionalidade e personalização melhoradas. Podem ser estabelecidos por nós ou por fornecedores externos cujos serviços adicionámos às nossas páginas. Se não permitir estes cookies algumas destas funcionalidades, ou mesmo todas, podem não atuar corretamente.

Cookies de publicidade

Estes cookies podem ser estabelecidos através do nosso site pelos nossos parceiros de publicidade. Podem ser usados por essas empresas para construir um perfil sobre os seus interesses e mostrar-lhe anúncios relevantes em outros websites. Eles não armazenam diretamente informações pessoais, mas são baseados na identificação exclusiva do seu navegador e dispositivo de internet. Se não permitir estes cookies, terá menos publicidade direcionada.

Visite as nossas páginas de Políticas de privacidade e Termos e condições.

Importante: Este site faz uso de cookies que podem conter informações de rastreamento sobre os visitantes.
Criado por WP RGPD Pro