sexta-feira, 2 de março de 2007

O que há de melhor no .NET 2.0


O título do post merecia uma análise muito mais profunda, mas vou apenas "dar uma pincelada" em 2 coisas que achei muito boas na versão 2.0 do .NET, o ASP .NET 2.0 e o conceito de Generics.
Sobre o ASP.NET 2.0 me fascina a incrivel evolução em todos os sentidos vindo da versão anterior ( só pra citar alguns, Master Pages e os novos controles do ex-Atlas e agora ASP.NET AJAX ). Nesse tópico vou ficar devendo sobre esses tópicos, mas tentarei fazer alguns artigos específicos sobre eles.
Por hora gostaria muito de elucidar um básico do básico sobre Generics, as Listas Fortemente tipadas que vieram pra deixar no ostracismo ( ainda bem, aliás ) a classe ArrayList \o/!!!
Se o leitor programou em .NET na versão 1.1, talvez já saiba que quando usamos a classe ArrayList para armazenarmos nossos objetos estamos fazendo algo um tanto quando deselegante programaticamente, mas pq?
Simples, ao usarmos a classe ArrayList como no exemplo abaixo, ao incluir um item ( por exemplo uma instancia da classe Pessoa ) estamos na verdade, tranformando essa pessoa num simples Object, pois internamente um ArrayList é um Object[] !!


// Aqui adiciono um objeto pessoa num ArrayList

ArrayList list = new ArrayList(1);

Pessoa pessoa = new Pessoa(); list.Add(pessoa);


// Se bem que não é muito diferente se eu fizesse isso aqui:

Object[] array = new Object[1];

array[0] = pessoa;


Não que esse código não irá funcionar, mas para a manipulação dos objetos nesse ArrayList ao usarmos um For ou um Foreach, temos que novamente converter o objeto para Pessoa quando formos recuperá-lo, além de que, com essa prática, ao cometermos algum erro de conversão, o mesmo não é achado na compilação.


// Aqui recupero corretamente o objeto

Pessoa novaPessoa = (Pessoa)list[0];


// Porém se eu fizer isso aqui, o programa continua compilando, mas reornará uma exception de

// Invalid Cast em tempo de execução

Carro carro = (Carro)list[0];


No .NET 1.1, poderiámos criar uma coleção tipada, mas mesmo assim ainda estariamos fazendo o boxing e unboxing, além de ser uma tarefa tediosa em grande sistemas.


class ColecaoPessoa : CollectionBase

{

public void Add( Pessoa pessoa )

{

base.InnerList.Add(pessoa);

}

public Pessoa this[int indice]

{

get

{

return (Pessoa)base.InnerList[indice];

}

set

{

base.InnerList[indice] = value;

}

}

}


E ai que entra o Generics, podemos abolir de vez toda essa parafernália anterior, apenas com isso:


// O mundo maravilhoso das listas tipadas

List list = new List();

list.add(pessoa);


// Nada de casts \o/

Pessoa novaPessoa = list[0];


// Isso gera um erro em tempo de compilação!!

Carro carro = list[0];


Isso é como eu disse, uma pequena "pincelada" no que podemos fazer com Generics.
Ficou interessado???

Recomendo a leitura desse Excelente livro da editora Wrox:

Vc nao tem ele?? Puxa... um passarinho me contou que vc acha ele aki: =P

Tudo tem um começo...

Bom, iniciando mais um projeto ( pq não? ) como esse, pouco tenho a dizer hoje. Acho esta uma interessante oportunidade para compartilhar aqui algum conhecimento ( seja de .NET, seja de qq outra coisa ). Não tenho um cunho filosofico para escrever asneiras ( ainda bem ), portanto não esperem histórias bonitinhas e sim realidades fervorosas ( O.o ).

Nos próximos episódios, contarei mais sobre minha empreitada de trabalho com dicas para quem tem interesse para iniciar na área de .NET ou de programação em geral, além das dicas específicas da tecnologia em si e de qq outra coisa q possa ser interessante.

Fiquem a vontade para qq critica ( e tb elogio se for merecido ^^ ).

E como dizem por aí... Respirem objetos!!!