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

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

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

توفر الأعضاء ذات الأجسام التعبيرية (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;
}

يمكنك أيضاً استخدام أجسام التعبيرات (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 members) لكتابة كود نظيف وموجز.

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

  • Product.cs: قم بتعريف فئة Product داخل مساحة الأسماء Store. يجب أن تستعرض هذه الفئة أعضاء مختلفين معتمدين على التعبير:

    • خاصية مطبقة تلقائياً (auto-implemented property) باسم Name (string) و BasePrice (decimal)
    • منشئ (constructor) معتمد على التعبير يقوم بتعيين كلتا الخاصيتين
    • خاصية للقراءة فقط معتمدة على التعبير باسم TaxAmount تحسب 10% من السعر الأساسي
    • خاصية للقراءة فقط معتمدة على التعبير باسم TotalPrice تعيد السعر الأساسي بالإضافة إلى مبلغ الضريبة
    • دالة (method) معتمدة على التعبير باسم GetDiscount(decimal percentage) تعيد مبلغ الخصم (السعر الأساسي مضروباً في النسبة المئوية مقسوماً على 100)
    • دالة معتمدة على التعبير باسم GetFinalPrice(decimal discountPercentage) تعيد السعر الإجمالي مطروحاً منه الخصم
  • Program.cs: في ملفك الرئيسي، قم بإنشاء كائن Product باستخدام قيم الإدخال، ثم اعرض تفاصيل التسعير الخاصة به.

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

  • اسم المنتج
  • السعر الأساسي
  • نسبة الخصم المراد تطبيقها

اطبع تفاصيل التسعير بهذا التنسيق:

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) بناء جملة السهم => للأعضاء التي تحتوي على تعبير واحد، مما يوفر بديلاً موجزاً لأجسام الأساليب والخصائص التقليدية.

الأساليب ذات البنية التعبيرية (Expression-bodied methods):

// أسلوب تقليدي
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}
    }
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming