LINQ - Conceitos básicos e fundamentos


Eu não vou falar exatamente sobre os recursos do LINQ neste artigo mas dos conceitos básicos e dos fundamentos sobre as novidades implementadas para dar suporte ao LINQ.

Sim, é isso mesmo, para que o LINQ possa realizar as suas peripécias foi necessário agregar novas características a linguagem VB .NET e C# formando assim alguns dos alicerces sobre os quais o LINQ se apóia. Implementar os recursos oferecidos pelo LINQ sem esses recursos não seria a mesma coisa.

Então vamos aos fundamentos...

Apresentando a Inferência de tipos

De forma clara e sem rodeios, a inferência de tipos (local variable type inferencing) significa dizer que o compilador é capaz de 'adivinhar' o tipo de dados de uma variável. É o sonho de todo o programador : não precisar se preocupar mais em declarar variáveis... mas como é que isso funciona ??

Para explicar esse recurso vou usar um trecho de código do LINQ, veja:

Dim var = From numeros In New Integer() {1, 7, 5, 3, 8, 6, 2, 4, 9} _
               Where numeros > 5 _
               Select numeros

For Each x In var
      ListBox1.Items.Add(x)
Next

No IDE do Editor do VB 2008 Express Edition podemos identificar as variáveis usadas no código acima. Assim temos que:

1 - A variável var do código acima pode ser identifica como sendo do tipo IEnumerable(Of Integer);

2- A variável números usada na sintaxe LINQ é do tipo Integer;

3- A variável x usada no laço For/Each é do tipo Integer;

Agora uma pergunta sutil.

Onde declaramos estas variáveis ?

Em lugar nenhum.

Mas então como é que o danado do compilador consegue 'adivinhar' o tipo das variáveis ?

Nas versões anteriores do Visual Basic poderíamos até declarar um valor a uma variável sem definir o tipo mas a variável seria considerada do tipo Object. Assim, no código abaixo, as variáveis a e b seriam identificadas como do tipo Object:

Dim a = 100
Dim b = DateTime.Now()

Qual é então a mágica feita na nova versão do VB.NET / C# para inferir os tipos de dados não declarados ?

Clique duas vezes sobre My Project, abra a  aba Compile e verifique que existe uma opção chamada Option Infer , e, que a mesma esta definida como On.

Bingo ! A inferência de tipos agora pode ser ativada ou não e por padrão ela esta ativa.

Mas por que a inferência de tipos é necessária ?

Devido ao LINQ permitir a criação de um tipo que não é definido de forma explícita.

Por causa disso, para atribuir uma variável a uma expressão com um tipo definido de forma implícita, o compilador precisa inferir o tipo, pois de outra não seria possível defini-lo via código.

O tipo da variável será definido a partir do valor com o qual você a inicializa.

Logo temos algumas regras para que isso funcione:

Eu sei é apenas LINQ mas eu gosto.

Referências sobre LINQ:


José Carlos Macoratti