Perguntei essa semana se o correto seria dizer que o C# agora na versão 4 tem parâmetros opcionais, ou argumentos opcionais.

Na especificação do C# aparece das duas formas:

19. Named and Optional Arguments
Named and optional parameters are really two distinct features, but are often useful together. Optional parameters allow …

Faz diferença?

Na prática a diferença é nula. Conceitualmente há diferença. Parâmetro é o nome dado ao valor onde a declaração da função é feita:

public void int Paginar(int pagina = 1) ...

Nesse caso, pagina é um parâmetro.

Argumento é o nome dado ao valor passado à função:

objeto.Paginar();
objeto.Paginar(1);
objeto.Paginar(pagina: 1);

Nesse caso, pagina é um argumento. Na primeira linha ele não é passado, porque é opcional. Na segunda ele é passado. Na terceira é passado de forma nomeada.

Segundo a Microsoft:

“To communicate this information to the procedure, the procedure defines a parameter, and the calling code passes an argument to that parameter. You can think of the parameter as a parking space and the argument as an automobile. Just as different automobiles can park in a parking space at different times, the calling code can pass a different argument to the same parameter every time that it calls the procedure.”

Essa documentação é do VB, mas o conceito vale para o C# também.

O que acontece então é que o argumento é opcional. O parâmetro apenas é que declara que o argumento é opcional.

E agora também temos parâmetros nomeados. Ou seriam argumentos nomeados? Mais uma vez, os parâmetros sempre foram nomeados, a diferença é que podemos agora nomear os argumentos, de acordo com o nome do parâmetro, e passá-los fora da ordem declarada dos parâmetros no método.

Para saber mais: Argumentos opcionais e argumentos nomeados.

Você não vai ser um desenvolvedor melhor por saber isso, mas serve para quando você ficar sem assunto no próximo happy hour.

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.