Guard Clauses
Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 19 из 66.
Guard clauses (защитные условия) — это условные операторы в начале метода, которые проверяют граничные случаи или некорректные входные данные и выполняют ранний возврат, если эти условия соблюдены.
Давайте создадим метод без защитного условия (guard clause):
public void ProcessOrder(Order order)
{
if (order != null)
{
// Обработка заказа
// Здесь много строк кода...
}
}Теперь давайте перепишем это с использованием защитного условия (guard clause):
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // Защитное условие — ранний выход, если заказ равен null
}
// Обработка заказа
// Здесь много строк кода...
}Защитные условия улучшают читаемость, уменьшая вложенность и обрабатывая исключительные случаи в начале метода.
Задание
ЛегкоСоздайте метод с именем DivideNumbers, который принимает два целых числа: numerator и denominator.
- Добавьте защитное условие (guard clause) для проверки, равен ли знаменатель нулю.
- Если знаменатель равен нулю, выведите: "Cannot divide by zero" и верните 0.
- В противном случае разделите числитель на знаменатель и верните результат.
Шпаргалка
Защитные условия (guard clauses) — это условные операторы в начале метода, которые проверяют граничные случаи или недопустимые входные данные и обеспечивают ранний выход из метода, если эти условия выполняются.
Без защитного условия:
public void ProcessOrder(Order order)
{
if (order != null)
{
// Process the order
// Many lines of code here...
}
}С защитным условием:
public void ProcessOrder(Order order)
{
if (order == null)
{
return; // Guard clause - exit early if order is null
}
// Process the order
// Many lines of code here...
}Защитные условия улучшают читаемость кода, уменьшая уровень вложенности и обрабатывая исключительные случаи в самом начале метода.
Попробуйте сами
using System;
public class Program
{
public static int DivideNumbers(int numerator, int denominator)
{
// Напишите свой код здесь
}
public static void Main()
{
// Чтение входных данных из консоли
int numerator = Convert.ToInt32(Console.ReadLine());
int denominator = Convert.ToInt32(Console.ReadLine());
// Вызов метода DivideNumbers
int result = DivideNumbers(numerator, denominator);
// Вывод результата
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