Extension Methods e legibilidade de código

Como o assunto DSL (Domain Specific Languages) ainda promete dar muito o que falar, parece que a gente fica cada dia mais influenciado pela tendência de deixar o código o mais próximo possível da linguagem de negócio.

Hoje, enquanto escrevendo um pequeno código de exemplo, acabei criando o seguinte teste:

[Test]
public void Aluno_DeveriaReceber100PorcendoDeGratuidadeCasoTenhaRendimentoAcimaDe90PorCento()
{
ConfiguracoesDoSistema.TipoDeGratuidade = TipoDeGratuidade.RendimentoAcademico;

Aluno bomAluno = new Aluno(“Bom Aluno”);
bomAluno.RendimentoAcademico = 95.Porcento();

Assert.AreEqual(100.Porcento(), bomAluno.GratuidadeConcedida.Valor);
}

Notem o uso da construção 100.Porcento(). Ela é possível através da utilização dos Extension Methods do C# 3.0. O código para gerar o extension method “Porcento” ficaria assim:


namespace Domain
{
public static class MyExtensionMethods
{
public static double Porcento(this int valor)
{
return (double)valor / 100;
}
}
}

O código do teste poderia estar ainda mais claro, isto é, sem interferências geradas pela sintaxe da linguagem, caso o C# suportasse o conteito de “Property Extensions”.
Se isso existisse, poderíamos escrever algo do tipo:

bomAluno.RendimentoAcademico = 95.Porcento;

De qualquer forma, ainda não estou convencido de que este código é mais legível. O que você acha?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>