Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)

جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 14 من 70.

توفر الأعضاء المعرفة بالتعبير (expression-bodied members) بناء جملة موجزًا للأعضاء التي تحتوي على تعبير واحد فقط. بدلاً من كتابة نص كامل للميثود (method) أو الخاصية باستخدام الأقواس المعقوفة، فإنك تستخدم بناء الجملة بسهم =>.

بالنسبة للميثودات (methods) التي تعيد تعبيرًا (expression) واحدًا، يمكنك استبدال جسم الميثود بالكامل:

// الطريقة التقليدية
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 bodies) لمُحَصِّلات (getters) ومُعَيِّنات (setters) الخصائص بشكل فردي:

private string name;
public string Name
{
    get => name;
    set => name = value.Trim();
}

حتى الدالّات المنشئة (constructors) يمكنها استخدام هذا بناء الجملة عندما تحتوي على عبارة واحدة:

public class Person
{
    public string Name { get; }
    public Person(string name) => Name = name;
}

تجعل الأعضاء المعتمدة على التعبيرات (Expression-bodied members) كودك أكثر قراءة عندما تكون المنطق بسيطًا. استخدمها للعمليات المباشرة، ولكن التزم بالهياكل التقليدية عندما تحتاج إلى عبارات متعددة أو منطق معقد.

challenge icon

التحدي

سهل

دعنا نائم حاسبة تسعير للمنتجات تستعرض قوة الأعضاء ذات بنية التعبير (expression-bodied) لكتابة كود نظيف وموجز.

ستقوم بإنشاء ملفين لتنظيم الكود الخاص بك:

  • Product.cs: قم بتحديد class باسم Product داخل namespace باسم Store. يجب أن يوضح هذا الـ class أعضاء متعددة ذات بنية expression-bodied:
    • خاصية مُنفذة تلقائيًا (auto-implemented) باسم Name (من نوع string) و BasePrice (من نوع decimal)
    • منشئ (constructor) ذو بنية expression-bodied يقوم بتعيين both الخصائص
    • خاصية للقراءة فقط ذو بنية expression-bodied باسم TaxAmount تحسب 10% من الـ base price
    • خاصية للقراءة فقط ذو بنية expression-bodied باسم TotalPrice ترجع الـ base price مضافًا إليه TaxAmount
    • method ذو بنية expression-bodied باسم GetDiscount(decimal percentage) يرجع قيمة الـ discount (الـ base price مضروبًا في الـ percentage ومقسومًا على 100)
    • method ذو بنية expression-bodied باسم GetFinalPrice(decimal discountPercentage) يرجع الـ total price minus الـ discount
  • Program.cs: في ملفك الرئيسي Main، أنشئ عنصرًا Product باستخدام قيم الـ input، ثم اعرض تفاصيل التسعير.

ستتلقى ثلاثة مدخلات (inputs):

  • اسم المنتج
  • الـ Base price
  • نسبة الـ Discount المطبقة

اطبع 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

قم بتنسيق كل قيمة مالية لتكون بخانتين عشريتين بالضبط — على سبيل المثال value.ToString("F2") أو $"{value:F2}". ينطبق ذلك على الـ base price، والضريبة، والـ 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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming