BT

Parâmetros Opcionais estão ganhando força no .NET

por Jonathan Allen , traduzido por Rafael Marques em 12 Jul 2010 |

Parâmetros opcionais sempre fizeram parte do .NET, porém com o C# relutando em dar suporte, onde utilizá-los é geralmente considerado um tabu a menos que se esteja trabalhando com as bibliotecas COM. Agora que o C# 4 suporta os parâmetros opcionais, nós estamos começando a vê-los sendo utilizados em muito mais do que apenas códigos legados. Outras formas de utilização incluem interoperabilidade com linguagens dinâmicas, estrutura de dados imutáveis e diversas partes do ASP.NET MVC.

O COM se mantém ainda como o uso principal dos parâmetros opcionais no .NET. Quando se está lidando com bibliotecas como a do Office, nós podemos ter mais de 20 parâmetros em uma função, o que se torna entendiante preenchê-los manualmente. E sem rótulos, é díficil encontrar erros e mapear quais parâmetros estão na posição correta. Para aqueles que não estão familiarizados com o COM, ele foi criado quando nem todas as linguagens suportavam sobrecarga de métodos. Porém como funções que possuem parâmetros opcionais podiam ser tratadas como funções normais, isto fez muito sentido na época.

Além das reclamações dos programadores COM, o time do C# estava utilizando C# 4 como uma chance de introduzir late binding, podendo assim suportar DLR. Este era o único recurso que eles realmente queriam dar suporte, e todo o resto veio naturalmente. Parâmetros opcionais são necessários em linguagens dinâmicas, pois a falta da tipagem explícita significa que não se pode sobrecarregar funções baseado em tipos de parâmetros.

Com o aumento da disponibilidade de computadores com CPU muti-core, discussões sobre paralelismo e concorrência estão se tornando mais comuns. Um tópico comum discutido é a utilidade de estrutura de dados imutáveis e os problemas ao definí-las. Se toda propriedade precisa ser definida, então um construtor padrão faz sentido. Porém quando a maioria das propriedades são opcionais, as coisas podem se complicar um pouco. Construtores sobrecarregados funcionam apenas até um certo ponto, onde muitas pessoas que utilizam Java ou versões mais antigas do C# frequentemente recorrem ao padrão Builder. Porém com parâmetros opcionais, pode-se facilmente realizar o trabalho com um único construtor.

Os Controllers no ASP.NET MVC 2 agora suportam valores padrão para parâmetros de uma consulta. Enquanto eles podem ser especificados utilizando atributos, a maneira mais sucinta de indicá-los é utilizar a sintaxe de parâmetros opcionais no C# ou VB. A engine de visualização da Microsoft, o Razor, utiliza parâmetros opcionais para helpers HTML. Isso possibilita muitas opções ao helper, enquanto provê um estilo de código auto-documentável. O Razor vai além, oferecendo suporte a transformar automaticamente expressões em delegates sem o lambda ou sintaxe de delegate anônimo.

Porém há lugares onde esperamos nunca encontrar parâmetros opcionais. A Common Language Specifications, que define o subconjunto do CLR que todas as linguagens devem suportar, discorda explicitamente na confiança em parâmetros opcionais. Isto significa que eles não são candidatos a utilizarem os parâmetros opcionais na Base Class Library e provavelmente nunca utilizarão em nenhuma biblioteca lançada como parte do framework .NET. Porém para outras bibliotecas liberadas via CodePlex, as regras são consideravelmente mais leves.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT