Menu
Coddy logo textTech

Early Returns

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 18 de 66.

Os retornos antecipados são uma técnica na qual saímos de um método assim que obtemos a resposta ou encontramos uma condição inválida, em vez de aninhar condicionais.

Vamos comparar duas abordagens para validar um nome de usuário:

Sem retornos antecipados (condicionais aninhados):

public bool ValidateUsername(string username)
{
    bool isValid = false;
    
    if (username != null)
    {
        if (username.Length >= 3)
        {
            if (username.Length <= 20)
            {
                isValid = true;
            }
        }
    }
    
    return isValid;
}

Com retornos antecipados:

public bool ValidateUsername(string username)
{
    // Return early if username is null
    if (username == null)
        return false;
        
    // Return early if username is too short
    if (username.Length < 3)
        return false;
        
    // Return early if username is too long
    if (username.Length > 20)
        return false;
        
    // If we get here, username is valid
    return true;
}

Retornos antecipados tornam o código mais legível e reduzem os níveis de indentação.

challenge icon

Desafio

Fácil

Escreva um método chamado ProcessPayment que determina se um pagamento pode ser processado com base em:

  1. O valor do pagamento deve ser positivo
  2. O saldo da conta deve ser suficiente
  3. A conta não deve estar bloqueada

Use retornos precoces para verificar cada condição e retornar mensagens de erro apropriadas.

O método deve:

  • Receber três parâmetros: decimal paymentAmount, decimal accountBalance e bool isAccountLocked
  • Retornar uma string com "Payment processed successfully" ou uma mensagem de erro
  • Usar retornos precoces para validação

Imprima mensagens de erro exatamente nestes formatos:

  • "Error: Payment amount must be positive"
  • "Error: Insufficient funds"
  • "Error: Account is locked"

Folha de consulta

Os retornos antecipados saem de um método imediatamente quando uma condição é atendida, evitando condicionais aninhadas e reduzindo a indentação.

Sem retornos antecipados (condicionais aninhadas):

public bool ValidateUsername(string username)
{
    bool isValid = false;
    
    if (username != null)
    {
        if (username.Length >= 3)
        {
            if (username.Length <= 20)
            {
                isValid = true;
            }
        }
    }
    
    return isValid;
}

Com retornos antecipados:

public bool ValidateUsername(string username)
{
    // Return early if username is null
    if (username == null)
        return false;
        
    // Return early if username is too short
    if (username.Length < 3)
        return false;
        
    // Return early if username is too long
    if (username.Length > 20)
        return false;
        
    // If we get here, username is valid
    return true;
}

Os retornos antecipados tornam o código mais legível e reduzem os níveis de indentação.

Experimente você mesmo

using System;

public class Program
{
    public static string ProcessPayment(decimal paymentAmount, decimal accountBalance, bool isAccountLocked)
    {
        // Escreva seu código aqui
    }
    
    public static void Main(string[] args)
    {
        decimal paymentAmount = decimal.Parse(Console.ReadLine());
        decimal accountBalance = decimal.Parse(Console.ReadLine());
        bool isAccountLocked = bool.Parse(Console.ReadLine());
        
        string result = ProcessPayment(paymentAmount, accountBalance, isAccountLocked);
        Console.WriteLine(result);
    }
}
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 Lógica & Fluxo