プロパティと条件分岐の基本
この資料では、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;
フィールドは、クラス内部でデータを格納する変数です。ここでは title
と author
という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;
}
}
上記のコードでは、SetTitle
や SetAuthor
メソッドを使って値を設定し、GetTitle
や GetAuthor
メソッドで値を取得します。
この方法でも動作しますが、C#ではプロパティを使うことでコードをより簡潔かつ直感的に記述できます。
ディスカッション
コメント一覧
まだ、コメントがありません