Menu
Coddy logo textTech

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;
challenge icon

チャレンジ

簡単

ProcessUserData という名前のメソッドを作成し、文字列パラメータ userData を受け取るようにしてください。このメソッドは以下を行うべきです:

  1. userData が null かどうかをチェック - そうであれば、"Error: User data is null" を出力して return してください。
  2. userData が空かどうかをチェック - そうであれば、"Error: User data is empty" を出力して return してください。
  3. データが有効な場合、それを大文字に変換し "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 値として扱うべきです
        
        // ここにコードを書いてください
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン