Menu
Coddy logo textTech

式本体のメンバー

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 メンバーを使用すると、ロジックがシンプルな場合にコードの可読性が向上します。簡単な操作にはこれを使用し、複数のステートメントや複雑なロジックが必要な場合は従来のブロック構文を使用してください。

challenge icon

チャレンジ

簡単

クリーンで簡潔なコードを記述するための expression-bodied メンバーの強力さを活かした、製品価格計算ツールを構築しましょう。

コードを整理するために、2つのファイルを作成します:

  • Product.cs: Store namespace 内に Product class を定義します。このクラスでは、さまざまな 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)
  • 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 が Laptop100015 の場合、出力は次のようになります:

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}");
    }
}
quiz icon腕試し

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

オブジェクト指向プログラミングのすべてのレッスン