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;
}Ранние возвраты делают код более читаемым и уменьшают уровни вложенности.
Задание
ЛегкоНапишите метод с именем ProcessPayment, который определяет, может ли быть обработан платеж, на основе:
- Сумма платежа должна быть положительной
- Баланс счета должен быть достаточным
- Счет не должен быть заблокированным
Используйте ранние возвраты для проверки каждого условия и возврата соответствующих сообщений об ошибках.
Метод должен:
- Принимать три параметра:
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);
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety