Fala Filhotes! Hoje irei mostrar uma novidade do C# 4.0. Algo muito, muito bacana e igualmente simples… são os Parâmetros Opcionais e consequentemente os Parâmetros Nomeados. Uma das coisas que eu senti falta quando eu migrei do VB.Net para o C# foi a falta de Parâmetros opcionais. “ Mas André, o que é Parâmetro Opcional ? “ A idéia é muito simples, é um Parâmetro com um valor padrão que não precisa ser preenchido. Isso deixa o código mais simples e diminui o numero de overloads. Vamos aos exemplos:

Vamos dizer que temos uma função para gravar os logs dos erros que recebe o erro, o usuario e o caminho do arquivo de log como Parâmetros.

 ... {
GravaLog("Erro 123: nada nada nada","andre",c:\\log22_06.txt");
        }        

       static bool GravaLog(string texto, string usuario,
       string caminhoLog)
        {
            try
            {
                StreamWriter sw = new StreamWriter(caminhoLog);
                sw.WriteLine("usuario: " + usuario +  ":" + texto);
                sw.Flush();                
            }
            catch (Exception ex)
            {
                return false;
            }

            return true;            
        }

Normal até ai, mas e se quisermos fazer a função gravar em um arquivo de Log padrão quando nós não enviarmos o caminho de um arquivo especifico? Ou mesmo se não tivermos o usuario ainda? Antigamente teriamos de fazer um novo overload para cada um desses casos, mas graças nós podemos fazer isso de um jeito muito melhor:

Olha como fica:

static bool GravaLog(string texto, string usuario = "System",  string caminhoLog = "c:\\log.txt")        {           try          { …

Viu como é simples? Atribuimos um valor default nos Parâmetros. Mas o que isso muda?

Se chamarmos a função desse jeito:

 GravaLog("Erro 123: nada nada nada");

O valor do usuario será System e do caminhoLog será c:\log.txt que são os valores que nós definimos como padrão. Você pode chamar também passando só o nome do usuario, ou mesmo todos os Parâmetros:

 GravaLog("Erro 123: nada nada nada", "Jose");

Os Parâmetros que você passou terão os valores enviados para a função( como antigamente ) e os que você não passou usarão o valor padrão. Bem simples, né?

Mas temos temos regras a seguir para poder usa-los: Os Parâmetros opcionais sempre devem ser declarados por ultimo na função, tanto que vocês podem ver que na nossa função os 2 ultimos são opcionais, poderiamos ate por todos os Parâmetros opcionais mas não só o primeiro. Bom, mas e se quisermos enviar só o texto e o caminhoLog sem passar o usuario?

Ai é só usar os Named Parameters ( Parâmetros nomeados ). Veja como é simples:

GravaLog("Erro 123: nada nada nada",caminhoLog:"i:\\logteste.ini");

É só passar o nome do Parâmetro que você quer preencher seguido de ":"(dois pontos)

com o valor que você quer. Simples né? Mas claro, só funciona com os Parâmetros opcionais (que você deu um valor padrão).

Bom filhotes, é isso ai, qualquer duvida, só avisar.