Menu
Coddy logo textTech

Parâmetros Opcionais

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 48 de 70.

Parâmetros opcionais permitem que você defina valores padrão para parâmetros de método. Quando um chamador não fornece um valor para esse parâmetro, o padrão é usado automaticamente.

Você cria um parâmetro opcional atribuindo um valor padrão na assinatura do método:

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// Ambas as chamadas funcionam
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

Parâmetros opcionais devem vir após todos os parâmetros obrigatórios. Você pode ter múltiplos parâmetros opcionais, e quem chama pode omitir qualquer um a partir da direita:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, Age: 0, Active: True
CreateUser("James", 25);               // James, Age: 25, Active: True
CreateUser("Sarah", 30, false);        // Sarah, Age: 30, Active: False

Valores padrão devem ser constantes de tempo de compilação - literais, valores const ou expressões default. Você não pode usar variáveis ou chamadas de método como padrões. Isso torna os parâmetros opcionais ideais para configurações e métodos onde a maioria dos chamadores usa valores comuns.

challenge icon

Desafio

Fácil

Vamos construir um sistema de notificação que utiliza parâmetros opcionais para fornecer uma formatação de mensagem flexível. Você criará uma classe utilitária que pode enviar notificações com configurações personalizáveis, onde a maioria dos chamadores usará padrões sensatos.

Você organizará seu código em dois arquivos:

  • NotificationService.cs: Crie uma classe NotificationService no namespace Notifications com um método que demonstre parâmetros opcionais:
    • SendNotification(string message, string priority = "Normal", bool addTimestamp = true) - Este método deve retornar uma string de notificação formatada. Quando addTimestamp for true, prefixe a mensagem com [TIMESTAMP]. O formato deve ser: [Priority] Message ou [TIMESTAMP] [Priority] Message dependendo da configuração do timestamp.
  • Program.cs: No seu arquivo principal, demonstre como os parâmetros opcionais funcionam chamando SendNotification de três maneiras diferentes - usando todos os padrões, substituindo um parâmetro e substituindo ambos os parâmetros opcionais.

Você receberá três entradas:

  • Primeira mensagem (usará todos os valores padrão)
  • Segunda mensagem (usará a prioridade "Urgent" com o timestamp padrão)
  • Terceira mensagem (usará a prioridade "Low" e sem timestamp)

Chame SendNotification três vezes e imprima cada resultado:

  1. Primeira chamada: passe apenas a primeira mensagem (usa os padrões: prioridade "Normal", timestamp ativado)
  2. Segunda chamada: passe a segunda mensagem com a prioridade "Urgent" (o timestamp ainda permanece como true por padrão)
  3. Terceira chamada: passe a terceira mensagem com a prioridade "Low" e false para o timestamp

Por exemplo, se as entradas forem System started, Server overload, e Cache cleared, a saída deve ser:

[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache cleared

Observe como o mesmo método lida com todos os três cenários de forma elegante - os chamadores apenas especificam o que precisam alterar em relação aos padrões!

Folha de consulta

Parâmetros opcionais permitem que você defina valores padrão para parâmetros de método. Quando um chamador não fornece um valor, o padrão é usado automaticamente.

Crie um parâmetro opcional atribuindo um valor padrão na assinatura do método:

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// Ambas as chamadas funcionam
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

Parâmetros opcionais devem vir após todos os parâmetros obrigatórios. Você pode ter múltiplos parâmetros opcionais:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, Age: 0, Active: True
CreateUser("James", 25);               // James, Age: 25, Active: True
CreateUser("Sarah", 30, false);        // Sarah, Age: 30, Active: False

Valores padrão devem ser constantes de tempo de compilação - literais, valores const ou expressões default. Você não pode usar variáveis ou chamadas de método como padrões.

Experimente você mesmo

using System;
using Notifications;

class Program
{
    public static void Main(string[] args)
    {
        // Lê as três mensagens
        string message1 = Console.ReadLine();
        string message2 = Console.ReadLine();
        string message3 = Console.ReadLine();

        // Cria uma instância de NotificationService
        NotificationService service = new NotificationService();

        // TODO: Chama SendNotification três vezes e imprime cada resultado:
        // 1. Primeira chamada: passa apenas message1 (usa todos os padrões)
        // 2. Segunda chamada: passa message2 com prioridade "Urgent" (timestamp o padrão é true)
        // 3. Terceira chamada: passa message3 com prioridade "Low" e false para timestamp

    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos