TOC

This article has been localized into Portuguese by the community.

O básico:

Parâmetros de função

No capítulo anterior, vimos as funções. Nós discutimos brevemente os parâmetros, mas apenas brevemente. Embora os parâmetros sejam muito simples e fáceis de usar, existem truques que podem torná-los muito mais poderosos.

A primeira coisa que vamos dar uma olhada são os modificadores out e ref. C# e outras linguagens também diferem entre dois parâmetros: "por valor" e "por referência". O padrão em C# é "por valor", o que basicamente significa que quando você passa uma variável para uma chamada de função, na verdade você está enviando uma cópia do objeto, em vez de uma referência a ele. Isso também significa que você pode fazer alterações no parâmetro de dentro da função, sem afetar o objeto original que você passou como parâmetro.

Com a palavra-chave ref e out, podemos alterar esse comportamento, então passamos uma referência ao objeto em vez de seu valor.

O modificador de ref

Considere o seguinte exemplo:

static void Main(string[] args)
{
    int number = 20;
    AddFive(number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(int number)
{
    number = number + 5;
}

Criamos um inteiro, atribuímos o número 20 a ele e usamos o método AddFive(), que deve adicionar 5 ao número. Mas isso? Não. O valor que atribuímos ao número dentro da função, nunca é realizado da função, porque passamos uma cópia do valor numérico em vez de uma referência a ela. Isso é simplesmente como o C # funciona e, em muitos casos, é o resultado preferido. No entanto, neste caso, queremos modificar o número dentro da nossa função. Digite a palavra-chave ref:

static void Main(string[] args)
{
    int number = 20;
    AddFive(ref number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(ref int number)
{
    number = number + 5;
}

Como você pode ver, tudo o que fizemos foi adicionar a palavra-chave ref à declaração de função, bem como à função de chamada. Se você executar o programa agora, verá que o valor do número mudou agora, uma vez que retornamos da chamada de função.

O modificador de saída

O modificador out funciona praticamente como o modificador ref. Ambos asseguram que o parâmetro é passado por referência em vez de por valor, mas eles vêm com duas diferenças importantes: Um valor passado para um modificador de ref tem que ser inicializado antes de chamar o método - isto não é verdade para o modificador out, onde você pode usar valores não inicializados. Por outro lado, você não pode deixar uma chamada de função com um parâmetro out, sem atribuir um valor a ela. Como você pode passar valores não inicializados como um parâmetro de saída, você não pode realmente usar um parâmetro de saída dentro de uma função - você só pode atribuir um novo valor a ela.

Se usar ou ref realmente depende da situação, como você vai perceber quando você começar a usá-los. Ambos são normalmente usados para contornar o problema de somente poder retornar um valor de uma função, com C #.

Usar o modificador out é como usar o modificador ref, conforme mostrado acima. Basta alterar a palavra-chave ref para a palavra-chave out. No exemplo acima, lembre-se também de remover o valor atribuído ao número no método e declará-lo na função de chamada.

O modificador params

Até agora, todas as nossas funções aceitaram uma quantidade fixa de parâmetros. No entanto, em alguns casos, você pode precisar de uma função que usa um número arbitrário de parâmetros. Isto pode ser feito, é claro, aceitando um array ou uma lista como um parâmetro, como este:

static void GreetPersons(string[] names) { }

No entanto, chamá-lo seria um pouco desajeitado. Na forma mais curta, ficaria assim:

GreetPersons(new string[] { "John", "Jane", "Tarzan" });

É aceitável, mas pode ser feito ainda mais inteligente, com a palavra-chave params:

static void GreetPersons(params string[] names) { }

Chamar isso ficaria assim:

GreetPersons("John", "Jane", "Tarzan");

Outra vantagem de usar a abordagem params é que você tem permissão para passar zero parâmetros para ela também. As funções com params também podem ter outros parâmetros, desde que o parâmetro com a palavra-chave params seja o último. Além disso, apenas um parâmetro usando a palavra-chave params pode ser usado por função. Aqui está um último e mais completo exemplo:

static void Main(string[] args)
{
    GreetPersons(0);
    GreetPersons(25, "John", "Jane", "Tarzan");
    Console.ReadKey();
}

static void GreetPersons(int someUnusedParameter, params string[] names)
{
    foreach(string name in names)
Console.WriteLine("Hello, " + name);
}
This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!