式本体のメンバー
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 14/70。
Expression-bodied メンバーは、単一の expression(式)のみを含むメンバーに対して簡潔な構文を提供します。中括号(波括弧)を使用して完全な method やプロパティの body を記述する代わりに、=> アロー構文を使用します。
単一の expression を返す method の場合、ボディ全体を以下のように置き換えることができます:
// 従来のメソッド
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 メンバーを使用すると、ロジックがシンプルな場合にコードの可読性が向上します。簡単な操作にはこれを使用し、複数のステートメントや複雑なロジックが必要な場合は従来のブロック構文を使用してください。
チャレンジ
簡単クリーンで簡潔なコードを記述するための expression-bodied メンバーの強力さを活かした、製品価格計算ツールを構築しましょう。
コードを整理するために、2つのファイルを作成します:
Product.cs:Storenamespace 内にProductclass を定義します。このクラスでは、さまざまな expression-bodied メンバーを実証する必要があります:- auto-implemented property
Name(string)とBasePrice(decimal) - both プロパティを設定する expression-bodied constructor
- base price の10%を calculates する expression-bodied read-only property
TaxAmount - base price に tax amount を加算した値を返す expression-bodied read-only property
TotalPrice - discount amount(base price に percentage を掛け、100で割った値)を返す expression-bodied method
GetDiscount(decimal percentage) - total price から discount を minus した値を返す expression-bodied method
GetFinalPrice(decimal discountPercentage)
- auto-implemented property
Program.cs: Main ファイルで、input 値を使用してProductを Create し、その価格の内訳(details)を表示します。
3つの inputs を受け取ります:
- Product name
- Base price
- 適用する Discount percentage
価格の details を以下の format で出力してください:
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}たとえば、inputs が Laptop、1000、15 の場合、出力は次のようになります:
Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00すべての金銭的数値は小数点以下2桁に正確に format してください(例: value.ToString("F2") や $"{value:F2}")。これは base price、tax、total、discount、final price のすべてに同様に適用されます。
単一の expression を含むすべてのメンバーには、=> アロー構文を使用することを忘れないでください。これにより、コードをクリーンで読みやすく保つことができます!
自分で試してみよう
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());
// 入力値を使用してProductオブジェクトを作成する
Product product = new Product(name, basePrice);
// GetDiscountメソッドを使用して割引額を計算する
decimal discountAmount = product.GetDiscount(discountPercentage);
// GetFinalPriceメソッドを使用して最終価格を計算する
decimal finalPrice = product.GetFinalPrice(discountPercentage);
// 必要な形式で価格の詳細を出力する:
Console.WriteLine($"Product: {product.Name}");
Console.WriteLine($"Base Price: {product.BasePrice:F2}");
Console.WriteLine($"Tax (10%): {product.TaxAmount:F2}");
Console.WriteLine($"Total Price: {product.TotalPrice:F2}");
Console.WriteLine($"Discount ({discountPercentage}%): {discountAmount:F2}");
Console.WriteLine($"Final Price: {finalPrice:F2}");
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。