sábado, 17 de maio de 2008

Extension Methods - C# 3.0

O novo C# 3.0 veio como uma novidade um tanto quanto interessante, as Extension Methods. Como o próprio nome já diz as Extension Methods estendem o comportamento de um tipo.

Vamos trabalhar melhor esse conceito!

No bom e velho ASP tínhamos a função FormatNumber() para tratamento de quantidade de casas decimais , que eu particularmente utilizava bastante. No C# para obtermos o mesmo efeito a partir de tipos Double temos algo muito simples:

protected void Page_Load(object sender, EventArgs e)
{
Double nota = 17 / 1.5;
Response.Write(Math.Round(nota,2).ToString());
}

Porém alguns ‘migradores’ do ASP para o ASP.Net (assim como eu), já me perguntaram se havia uma forma de criar um método semelhante a função do ASP, apenas por questão de costume.

Bem, poderíamos simplesmente criar uma classe estendida da classe Double e dentro dela criar esse método. PODERÍAMOS. Por ser uma classe sealed, Double não pode ser estendida. Mas em uma certa ‘amarração’ conseguimos sim chegar a um resultado parecido. Veja o exemplo:

Arquivo funcoes.cs
public class funcoes
{
public static Double FormatNumber(Double valor, int casasDecimais)
{
return Math.Round(valor, casasDecimais);
}
}

Arquivo Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Double nota = 17 / 1.5;
Response.Write(funcoes.FormatNumber(nota,4).ToString());
}

Algum tempo se passou e eis que surge o C# 3.0 para melhorar nosso método FormatNumber() e ‘transformá-lo’ em uma extensão do tipo Double. As Extension Methods nos permitem adicionar novos métodos a um tipo existente sem a necessidade de herança. Que beleza. Então vamos ver como ficaria nosso querido método FormatNumber()?

Arquivo Extension.cs
public static class Extension //NÃO, não está errado. Mais uma novidade do C# 3.0: classes estáticas
{
//Observe o 'this' antes do primeiro parâmetro, demonstrando o tipo a que a Extension Method se aplica
public static Double FormatNumber(this Double dbl, int casasDecimais)
{
return Math.Round(dbl, casasDecimais);
}
}

Arquivo Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
Double nota = 17 / 1.5;
Response.Write(nota.FormatNumber(2).ToString());
}

Esse foi um exemplo bem simples de uso das Extension Methods. O uso delas vai muito além de um simples capricho de ‘ex-programadores ASP’.

Dica: Milhares e milhares de tópicos e tutoriais na Internet podem ajudar nos seus estudos. Tente usar o Google: http://www.google.com.br/search?hl=pt-BR&q=%22Extension+Methods%22+c%23&meta

Galera um grande abraço e até a próxima, quando falarei sobre LINQ.

terça-feira, 13 de maio de 2008

Eu odeio o Java!

Porque eu odeio o Java?

Resposta: Não sei!

É simples assim. É óbvio que existem argumentos tendenciosos a justificar essa singela opinião (argumentos esses que irei expor mais abaixo), mas em um balanço geral não sei por que odeio o Java, mas odeio. Assim como odeio PHP, odeio Apache, odeio Linux, odeio Software Livre.

Começarei citando o conceito de Software Livre. O grande fato é que li, reli, conversei com vários defensores de Software Livre e simplesmente não consegui aceitar esse conceito. E sei que muitos virão de mão cheia, prontos para o murro na cara que irei levar, mas não consigo entender como em um mundo capitalista como é o nosso, nós, a famigerada classe de programadores (e nesse caso independe da linguagem utilizada) conseguiria sobreviver fornecendo seu ‘suado’ código-fonte para quem quiser.

E não adianta vir com o argumento usado por muitos: “A licença GNU não é assim”. Não é assim uma vírgula. Na teoria tudo é belo, mas na prática 95% das pessoas que tomam posse de códigos-fonte abertos extrapolam e muito os limites da GNU.

“Tudo bem, mas então seu problema não é com o Java e sim com Software Livre!”. Também. Mesmo assim o maior dos meus ‘problemas’ é, e sempre será o Java. Essa palavrinha tão sutil soa como palavrão nos meus ouvidos.

“Mas você ao menos já tentou programar em Java pra falar tudo isso?”. 44 horas de Programação Java na x25 (cerca de R$ 1.250,00), uma boa grana investida em livros entre eles um excelente livro para a certificação 310-055, artigos e mais artigos lido por todos os cantos da Internet e quase 1 ano da minha vida desperdiçado. Esta foi minha vida como ‘Javeiro’. Passado obscuro e longínquo que vira-e-mexe aparece durante a noite para me assombrar.

O resumo é simples: Não rolou química com o Java. Quem sabe em uma próxima encarnação? Hehe

Obs.: As opiniões são livres e cada um pensa o que quer. Respeito a opinião de todos. Sintam-se a vontade para concordar ou discordar.


Abraço a todos!