Defensive Programming
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 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;
}
// これで order を安全に処理できます
Console.WriteLine("Processing order: " + order.Id);
}よりクリーンな null チェックのために条件付きアクセス演算子 (?.) を使用:
Customer customer = GetCustomerFromSomewhere();
// Instead of:
// string city = null;
// if (customer != null && customer.Address != null)
// {
// city = customer.Address.City;
// }
// Use this:
string city = customer?.Address?.City;チャレンジ
簡単ProcessUserData という名前のメソッドを作成し、文字列パラメータ userData を受け取るようにしてください。このメソッドは以下を行うべきです:
userDataが null かどうかをチェック - そうであれば、"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