Menu
Coddy logo textTech

Early Returns

Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 18 из 66.

Ранние возвраты — это техника, при которой мы выходим из метода, как только получаем ответ или сталкиваемся с недопустимым условием, вместо вложенных условных конструкций.

Давайте сравним два подхода к валидации имени пользователя:

Без ранних возвратов (вложенные условные конструкции):

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

С ранними возвратами:

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;
}

Ранние возвраты делают код более читаемым и уменьшают уровни вложенности.

challenge icon

Задание

Легко

Напишите метод с именем ProcessPayment, который определяет, может ли быть обработан платеж, на основе:

  1. Сумма платежа должна быть положительной
  2. Баланс счета должен быть достаточным
  3. Счет не должен быть заблокированным

Используйте ранние возвраты для проверки каждого условия и возврата соответствующих сообщений об ошибках.

Метод должен:

  • Принимать три параметра: decimal paymentAmount, decimal accountBalance и bool isAccountLocked
  • Возвращать строку либо с "Payment processed successfully", либо с сообщением об ошибке
  • Использовать ранние возвраты для валидации

Выводите сообщения об ошибках точно в этих форматах:

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

Шпаргалка

Ранние возвраты немедленно выходят из метода при выполнении условия, избегая вложенных условных конструкций и уменьшая отступы.

Без ранних возвратов (вложенные условные конструкции):

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

С ранними возвратами:

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;
}

Ранние возвраты делают код более читаемым и уменьшают уровни отступов.

Попробуйте сами

using System;

public class Program
{
    public static string ProcessPayment(decimal paymentAmount, decimal accountBalance, bool isAccountLocked)
    {
        // Напишите свой код здесь
    }
    
    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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком