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?

#1 john on 5.14.2009 at 9:30 PM

thanx a lot... this was really useful

#2 Rapidshare SE on 2.26.2010 at 4:14 AM

Thanks for a nice explanation. It is cool that the language is not a barrier.

Leave a Comment