Defensive Programming
Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 34 из 66.
Защитное программирование — это техника, которая помогает предотвратить ошибки, вызванные ссылками на null. Оно включает проверку значений null перед попыткой использования объектов.
Проверяйте на null перед использованием объекта:
string name = GetNameFromSomewhere();
// Defensive check
if (name == null)
{
// Handle the null case
name = "Default Name";
}
// Now it's safe to use name
Console.WriteLine(name.ToUpper());Проверка параметров в методах:
public void ProcessOrder(Order order)
{
// Защитная проверка параметра на null
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
// Теперь безопасно обрабатывать заказ
Console.WriteLine("Processing order: " + order.Id);
}Используйте оператор условного доступа (?.) для более чистых проверок на null:
Customer customer = GetCustomerFromSomewhere();
// Вместо этого:
// string city = null;
// if (customer != null && customer.Address != null)
// {
// city = customer.Address.City;
// }
// Используйте это:
string city = customer?.Address?.City;Задание
ЛегкоСоздайте метод с именем ProcessUserData, который принимает строковый параметр userData. Метод должен:
- Проверить, является ли
userDatanull — если да, вывести "Error: User data is null" и return. - Проверить, пустой ли
userData— если да, вывести "Error: User data is empty" и return. - Если данные действительны, преобразовать их в верхний регистр и вывести "Processing: [UPPERCASE_DATA]".
Шпаргалка
Защитное программирование предотвращает ошибки путем проверки значений null перед использованием объектов.
Проверяйте на null перед использованием объекта:
string name = GetNameFromSomewhere();
if (name == null)
{
name = "Default Name";
}
Console.WriteLine(name.ToUpper());Валидируйте параметры в методах:
public void ProcessOrder(Order order)
{
if (order == null)
{
Console.WriteLine("Error: Order cannot be null");
return;
}
Console.WriteLine("Processing order: " + order.Id);
}Используйте условный оператор доступа (?.) для более чистых проверок на null:
Customer customer = GetCustomerFromSomewhere();
string city = customer?.Address?.City;Попробуйте сами
using System;
class ProcessUserData
{
public static void processUserData(string userData)
{
// Подсказка: строку "null" следует рассматривать как фактическое значение null
// Напишите свой код здесь
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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