式本体のメンバー
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 14/70。
式形式のメンバーは、単一の式のみを含むメンバーに対して簡潔な構文を提供します。中括弧を使用した完全なメソッドやプロパティの本体を記述する代わりに、=> 矢印構文を使用します。
単一の式を返すメソッドの場合、ボディ全体を置き換えることができます。
// 従来のメソッド
public int Add(int a, int b)
{
return a + b;
}
// 式形式のメソッド
public int Add(int a, int b) => a + b;この構文は、以前に少し触れた読み取り専用プロパティでも機能します。
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}プロパティのゲッターとセッターに対して、個別に式形式の本体(expression body)を使用することもできます:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}単一のステートメントを含む場合、コンストラクターでもこの構文を使用できます。
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}式本体のメンバーを使用すると、ロジックが単純な場合にコードの可読性が向上します。単純な操作にはこれらを使用し、複数のステートメントや複雑なロジックが必要な場合は、従来の本体(ブロック形式)を使用するようにしてください。
チャレンジ
簡単クリーンで簡潔なコードを書くための式形式のメンバー(expression-bodied members)の威力を示す、製品価格計算ツールを作成しましょう。
コードを整理するために、2つのファイルを作成します:
Product.cs:Store名前空間内にProductクラスを定義します。このクラスでは、さまざまな式形式のメンバーを実装してください:- 自動実装プロパティ
Name(string) とBasePrice(decimal) - 両方のプロパティを設定する式形式のコンストラクタ
- 基本価格(base price)の10%を計算する式形式の読み取り専用プロパティ
TaxAmount - 基本価格に税額を加算して返す式形式の読み取り専用プロパティ
TotalPrice - 割引額(基本価格 × パーセンテージ / 100)を返す式形式のメソッド
GetDiscount(decimal percentage) - 合計金額から割引額を引いた値を返す式形式のメソッド
GetFinalPrice(decimal discountPercentage)
- 自動実装プロパティ
Program.cs: メインファイルで、入力値を使用してProductを作成し、その価格の内訳を表示します。
3つの入力を受け取ります:
- 製品名
- 基本価格
- 適用する割引率(パーセンテージ)
価格の詳細は以下の形式で出力してください:
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}例えば、入力が Laptop、1000、15 の場合、出力は以下のようになります:
Product: Laptop
Base Price: 1000
Tax (10%): 100
Total Price: 1100
Discount (15%): 150
Final Price: 950単一の式を含むすべてのメンバーには、=> 矢印構文を使用することを忘れないでください。これにより、コードをクリーンで読みやすく保つことができます!
チートシート
式形式のメンバー(Expression-bodied members)は、単一の式を含むメンバーに対して => アロー構文を使用し、従来のメソッドやプロパティの本体に代わる簡潔な記述方法を提供します。
式形式のメソッド:
// 従来のメソッド
public int Add(int a, int b)
{
return a + b;
}
// 式形式のメソッド
public int Add(int a, int b) => a + b;式形式の読み取り専用プロパティ:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}式形式のプロパティのゲッターとセッター:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}式形式のコンストラクター:
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}単純な操作には式形式のメンバーを使用してください。複数のステートメントや複雑なロジックの場合は、従来の本体を使用してください。
自分で試してみよう
using System;
using Store;
class Program
{
public static void Main(string[] args)
{
// 入力を読み込む
string name = Console.ReadLine();
decimal basePrice = Convert.ToDecimal(Console.ReadLine());
decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());
// TODO: 入力値を使用して Product オブジェクトを作成する
// TODO: GetDiscount メソッドを使用して割引額を計算する
// TODO: GetFinalPrice メソッドを使用して最終価格を計算する
// TODO: 必要な形式で価格の詳細を出力する:
// Product: {Name}
// Base Price: {BasePrice}
// Tax (10%): {TaxAmount}
// Total Price: {TotalPrice}
// Discount ({percentage}%): {discountAmount}
// Final Price: {finalPrice}
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。