プロパティと条件分岐の基本

この資料では、C#におけるプロパティの使い方を学習します。
プロパティを使用すると、クラス内のデータ(フィールド)の値にアクセスしたり、値を設定する際に特定のルールを適用することができます。

ここでは、初学者向けに「タイトル」と「著者」のデータを管理するコードを例にして説明します。


簡略化されたプロパティのコード

以下は、プロパティを簡略化したコード例です。このコードを初学者向けに分かりやすく書き直していきます。

private string title;
private string author;

public string Title
{
    get => title;
    set => title = string.IsNullOrWhiteSpace(value) ? "不明" : value;
}

public string Author
{
    get => author;
    set => author = string.IsNullOrWhiteSpace(value) ? "不明" : value;
}

三項演算子の説明

使われている箇所

以下のプロパティsetアクセサ内で三項演算子が使用されています:

set => title = string.IsNullOrWhiteSpace(value) ? "不明" : value;

構文

三項演算子の基本構文は以下の通りです:

条件式 ? 条件がtrueの場合の値 : 条件がfalseの場合の値

動作の詳細

  • string.IsNullOrWhiteSpace(value)
    引数として渡された値がnull、空文字、または空白文字だけで構成されている場合にtrueを返します。
  • ? "不明" : value
    条件がtrueなら"不明"を代入し、条件がfalseならそのまま渡された値を代入します。

if-elseに書き換えた場合

三項演算子をif-else文で記述すると以下のようになります:

set
{
    if (string.IsNullOrWhiteSpace(value))
    {
        title = "不明";
    }
    else
    {
        title = value;
    }
}

このコードは、ラムダ式を使って短く記述されていますが、初学者には少し難しい場合があります。
次に、このコードを分解してフル構文で書き直します。


プロパティを簡略化していないコード

以下は、初心者が理解しやすいように書き直したコードです。

// クラスの定義
public class Book
{
    // フィールド(データの格納場所)
    private string title;
    private string author;

    // Title プロパティ
    public string Title
    {
        get
        {
            return title;
        }
        set
        {
            // 空白や未入力の場合 "不明" を設定
            if (string.IsNullOrWhiteSpace(value))
            {
                title = "不明";
            }
            else
            {
                title = value;
            }
        }
    }

    // Author プロパティ
    public string Author
    {
        get
        {
            return author;
        }
        set
        {
            // 空白や未入力の場合 "不明" を設定
            if (string.IsNullOrWhiteSpace(value))
            {
                author = "不明";
            }
            else
            {
                author = value;
            }
        }
    }
}

コードのポイント解説

1. フィールドとは?

private string title;
private string author;

フィールドは、クラス内部でデータを格納する変数です。ここでは titleauthor という2つの文字列型フィールドを作成しました。

2. プロパティの構造

プロパティは、フィールドの値を安全に操作するための仕組みです。

Title プロパティの例:

public string Title
{
    get
    {
        return title;
    }
    set
    {
        if (string.IsNullOrWhiteSpace(value))
        {
            title = "不明";
        }
        else
        {
            title = value;
        }
    }
}
  • getアクセサ:
    フィールド title の値を外部に返します。
return title;
  • setアクセサ:
    外部から値を受け取り、フィールドに設定します。ただし、値が空白や未入力の場合は “不明" を設定します。
if (string.IsNullOrWhiteSpace(value))
{
    title = "不明";
}
else
{
    title = value;
}

Author プロパティの例:

Author プロパティも Title と同じように動作します。

3. string.IsNullOrWhiteSpace** の使い方**

このメソッドは、文字列が以下のいずれかの場合に true を返します。

  • 空文字列(例: ""
  • 空白のみ(例: " "
  • null

これを使用することで、入力が無効な場合を簡単にチェックできます。


実際に試してみよう

次のコードを使って、Book クラスの動作を確認してみましょう。

class Program
{
    static void Main(string[] args)
    {
        // Book オブジェクトの作成
        Book myBook = new Book();

        // 値を設定
        myBook.Title = ""; // 空文字を設定
        myBook.Author = null; // null を設定

        // 結果を表示
        Console.WriteLine("Title: " + myBook.Title); // 出力: Title: 不明
        Console.WriteLine("Author: " + myBook.Author); // 出力: Author: 不明

        // 正しい値を設定
        myBook.Title = "C# Programming";
        myBook.Author = "John Doe";

        // 結果を表示
        Console.WriteLine("Title: " + myBook.Title); // 出力: Title: C# Programming
        Console.WriteLine("Author: " + myBook.Author); // 出力: Author: John Doe
    }
}

学習のまとめ

  • プロパティ を使うと、データの取得や設定にルールを追加できます。
  • getアクセサは値を取得するために使用します。
  • setアクセサは値を設定するために使用します。
  • string.IsNullOrWhiteSpace を使うと、無効な入力を簡単にチェックできます。

プロパティの仕組みを理解することで、C#のクラス設計がより柔軟かつ安全になります。ぜひ実践してみてください!

(参考)メソッドに置き換えたコード

以下は、プロパティを使用しない場合の基本的なコード例です。

ここでは、メソッドに置き換えています

// クラスの定義
public class Book
{
    // フィールド(データの格納場所)
    private string title;
    private string author;

    // フィールドの値を直接操作するメソッド
    public void SetTitle(string value)
    {
        if (string.IsNullOrWhiteSpace(value))
        {
            title = "不明";
        }
        else
        {
            title = value;
        }
    }

    public string GetTitle()
    {
        return title;
    }

    public void SetAuthor(string value)
    {
        if (string.IsNullOrWhiteSpace(value))
        {
            author = "不明";
        }
        else
        {
            author = value;
        }
    }

    public string GetAuthor()
    {
        return author;
    }
}

上記のコードでは、SetTitleSetAuthor メソッドを使って値を設定し、GetTitleGetAuthor メソッドで値を取得します。

この方法でも動作しますが、C#ではプロパティを使うことでコードをより簡潔かつ直感的に記述できます。

C#,プロパティ

Posted by hidepon