Досрочный выход
Часть раздела Логика и управление потоком путешествия по 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)
{
// Выполнить досрочный возврат, если username равен null
if (username == null)
return false;
// Выполнить досрочный возврат, если username слишком короткий
if (username.Length < 3)
return false;
// Выполнить досрочный возврат, если username слишком длинный
if (username.Length > 20)
return false;
// Если выполнение дошло до этого места, username допустим
return true;
}Ранний возврат делает код более читаемым и уменьшает уровень вложенности.
Задание
ЛегкоНапишите метод с именем ProcessPayment, который определяет, можно ли обработать платёж, на основе следующих условий:
- Сумма платежа должна быть положительной
- На счёте должно быть достаточно средств
- Счёт не должен быть заблокирован
Используйте ранний возврат, чтобы проверить каждое условие и вернуть соответствующие сообщения об ошибках.
Метод должен:
- Принимать три параметра:
decimal paymentAmount,decimal accountBalanceиbool isAccountLocked - Возвращать строку: либо "Payment processed successfully", либо сообщение об ошибке
- Использовать ранний возврат для проверки условий
Выводите сообщения об ошибках точно в следующих форматах:
- "Error: Payment amount must be positive"
- "Error: Insufficient funds"
- "Error: Account is locked"
Попробуйте сами
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);
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовОбъявление и инициализация 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиЗубчатые массивыОсновные операции с матрицамиПовторение — многомерные массивы4Методы управления потоком выполнения
Досрочный выходЗащитные условияОператоры перехода (goto)Break и ContinueУпрощение вложенных условных конструкций7Логические операторы: продвинутый уровень
Вычисление с коротким замыканиемУсловные логические операторыПриоритет операторовПовторение — продвинутые операторы2Продвинутое принятие решений
Множественные условияСложная логика BooleanСравнение If и SwitchВложенные конструкции SwitchПовторение — продвинутые решения5Обработка исключений
Основы Try-CatchТипы исключенийНесколько блоков CatchРабота с файламиБлок FinallyИспользование Using вместо Try-FinallyПользовательские исключенияПовторение — обработка ошибок3Улучшение циклов
Производительность цикловИтерация по сложным структурамКаждый тип циклаРефакторинг цикловПовторение — оптимизированные циклы6Обработка null
Основы ссылок на nullТипы значений, допускающие nullШаблоны проверки на nullЗащитное программированиеПовторение — безопасность при работе с nullПотренируйтесь самостоятельно: Онлайн-компилятор C#