Segundo o prestigiado Engenheiro de Software dinamarquês Anders Hejlsberg responsável pela criação da linguagem C#, o "milestone", ou seja, o grande marco da versão C# 4.0 é o recurso Dynamic Programming, esse artigo tem por objetivo explicar sobre esse recurso que visa mudar o paradigma de desenvolvimento atual em alguns cenários.

 

Programação dinâmica 

 

Linguagens como PHP, Perl, Python, Javascript e Ruby possuem portabilidade a programação dinâmica porque essas linguagens permitem que o desenvolvedor inclua um novo código ou altere métodos de objetos em tempo de execução e não em tempo de compilação.

 

Dynamic Language Runtime

 

Anders Hejlsberg tinha como objetico fornecer a os desenvolvedores .NET uma maneira simples de programar de forma dinâmica dentro de uma linguagem tipada estaticamente, parece contraditório, porém foi possível atráves de uma nova camada incluída dentro do Framework 4.0.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

O DLR fornece a disposição dos desenvolvedores o "Dynamic Type" que deve ser utilizado usando a palavra reservava dynamic, que nada mais é do que um tipo estático, o dynamic pode ser qualquer tipo a diferença dele para os demais tipos é que ele força o compilador a não fazer nenhuma validação em tempo de compilação, fazendo com que as operações sejam validadas apenas em tempo de execução.  

 

Usabilidade

  

Sintaxe básica de um Dynamic Type.

 

dynamic var1 = "1";
dynamic var2 = 2;
dynamic var3 = new { DevBrasil = "Submmit 2012"};

 

Acima foi colocado alguns tipos de objetos que o dynamic aceita, lembrando que ele aceita qualquer tipo, e que podemos passar esses tipos por parâmetro ou como tipo de retorno de um método.


Antes do c# 4.0 sem Dynamic Programming


using System;

namespace DevBrasil
{
    public class Program
    {
        static void Main(string[] args)
        {
            SelecionarNomeMembro(new { NomeMembro = "Leandro Rodrigues" });
        }

        public static void SelecionarNomeMembro<T>(T t)
        {
            string nome = typeof(T).GetProperty("NomeMembro").GetValue(t, null) as string;

            Console.WriteLine(nome);
            Console.ReadLine();
        }
    }
}


Depois do c# 4.0 com Dynamic Programming


using System;

namespace DevBrasil
{
    public class Program
    {
        static void Main(string[] args)
        {
            SelecionarNomeMembro(new { NomeMembro = "Leandro Rodrigues" });
        }

        public static void SelecionarNomeMembro(dynamic obj)
        {
            Console.WriteLine(obj.NomeMembro);
            Console.ReadLine();
        }
    }
}


Com esses dois exemplos de código acima ficou fácil mensurar o ganho, antes era muito mais complexo, precisava ser empregado Reflection, de forma simples economizamos uma linha e deixamos o código muito fácil de ser entendido! =D.


Abaixo segue outro exemplo onde é extremamente vantajoso o uso do tipo dinâmico.


// Antes do c# 4.0 sem Dynamic Programming
var xmlDoc = new XmlDocument("arquivo.xml");
var xmlElement = xmlDoc.GetElement("membro").GetElement("nome");

// Depois do c# 4.0 com Dynamic Programming
dynamic xmlDoc = new XmlDocument("arquivo.xml");
var xmlElement = xmlDoc.membro.nome;

 

Outro nível de utilização e também muito importante é a portabilidade a componentes COM, bem como, a linguagens dinâmicas como IronRuby, porém deixaremos isso para um próximo artigo ;) ...


Vantagens

 

- Permite uma maior flexibilidade

- Melhora a utilização de objetos de componentes COM

- Portabilidade total a linguagens como IronPython e IronRuby

- Diminiu a complexidade existentes na manipulação de tipos anônimos.

 

Desvantagens

 

- Forte tendencia a gerar BUG.

 

Remediando a desvantagem  

 

O recurso dynamic type na minha concepção é muito interessante, no entando em alguns cenários temos alguns problemas,como tudo é resolvido apenas em tempo de execução, em tempo de compilação nada é verificado, ou seja, em tempo de execução uma variável do tipo inteiro pode ter atribuida para um tipo DateTime o que irar gerar bug.

O remédio para esses erros não existirem é a utilização de teste unitário, então todo desenvolvedor que for trabalhar com dynamic type dentro de um cenário complexo, deve saber que é de extrema necessidade realizar o teste unitário.

 

Nesse artigo, foi explicado a importancia da utilização do Dynamic Programming através do dynamic type, o objetivo foi mostrar em quais cenários podemos utilizar esse recurso, bem como, popularizar a utilização desse recurso na comunidade de desenvolvedores .NET.

 

Para saber mais:

Aprofunde seu conhecimento sobre C#  

MSDN Dynamic Type

 


 

 

Exibições: 412

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

Comentário de gladson pereira em 15 março 2012 às 22:52
Show! Valeu! :)
Comentário de Reginaldo Bras Floriano em 29 fevereiro 2012 às 0:13

Está explicito, sabendo usar ganhamos muito. Boa matéria heim.

Comentário de Yan de Lima Justino em 23 fevereiro 2012 às 8:28

Na prática, "Forte tendencia a gerar BUG" esconde muita coisa .rsrsrsrsrr! Um exemplo clássico é quando Você chama uma propriedade que não foi criada.

Comentário de Edilson Andrade em 12 fevereiro 2012 às 21:42

Muito bom, gostei, mas realmente é um risco grande desenvolver aplicações utilizando dynamic types, acho que em alguns métodos até pode valer a pena, mas em toda uma aplicação, pode ser um tiro no pé.

Muito boa a matéria, parabéns

Comentário de Cleiton Felipe de Moraes em 12 fevereiro 2012 às 12:41

Muito bom Leandro excelente artigo.

Comentário de Fábio Sampaio em 9 fevereiro 2012 às 17:00

Excelente artigo!

Comentário de Leandro Rodrigues em 9 fevereiro 2012 às 15:36

 

Valeu Márcio! 

 

Obrigado! 

Comentário de Márcio Araújo em 9 fevereiro 2012 às 13:03

Muito bom e bem explicado. Valeu Leandro.

© 2020   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço