segunda-feira, 4 de agosto de 2014

Açúcar Sintático com Extension Methods no C#

Fala galera, tudo tranquilo?
Essa semana me empolguei nos Extensions Methods de C# e resolvi escrever a respeito!


Extension Methods


Os Extension Methods surgiram com o intuíto de te auxiliar na hora do desenvolvimento. Ele resolvem um problema dos grandes, permitem que você adicione métodos a tipos de dados já existentes. Evitando assim, que você tenha que criar um novo tipo.
Existe uma biblioteca muito famosa no C# que se chama LINQ no qual implementa diversos extension methods para trabalharmos com IENumerable.

Bom, mas como de costume, existem fontes mais detalhadas a respeito Extension Methods, se puder, invista uns 15 minutos lendo.

Vamos a prática? É bem simples! Criei um projetinho Class Library no Visual Studio, e adicionei algumas dependências que já estou acostumado a usar: FluentAssertions e NUnit.
Primeira classe:

public static class Ext
{
    public static int Soma(this int x, int y)
    {
        return x + y;
    }
       
    public static string RecortarEColar(this string s, string old, string neww)
    {
        return s.Replace(old, neww);
    }
}

E como usamos esses métodos?


public class extTest
{
    [Test]
    public void DeveSomar()
    {
        234.Soma(266).Should().Be(500);
    }
    [Test]
    public void DeveTrocar()
    {
        "Extension Methods são fodas".RecortarEColar("fodas", "úteis").Should.Be("Extension Methods são úteis");
    }
}


Simples de usar e entender. Mas por que os métodos são estáticos? Eles são apenas um Açucar Sintático, servem para deixar o código mais legível! Assim como o Should().Be()... Na Real o que o compilador faz é tornar o código acima parecido com isso:
      
    Ext.Soma(234, 266);
    Ext.RecortarEColar("Extension Methods são fodas", "úteis");


E aí qual ficou mais legível, nosso código acima, ou o clássico chama a classe estática e seu método e passamos os parâmetros?

Por hoje é isso aí galera. Abraços