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

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

جزء من قسم البرمجة كائنية التوجه في رحلة C# على Coddy. الدرس 14 من 70.

توفر الأعضاء ذات الصيغة المعتمدة على 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;
}

يمكنك أيضًا استخدام أجسام التعبيرات لواصِلات الحصول على الخصائص وتعيينها بشكلٍ فردي:

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;
}

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

challenge icon

التحدي

سهل

لنُنشئ حاسبة لأسعار المنتجات تستعرض قوة الأعضاء ذوي الصياغة التعبيرية لكتابة تعليمات برمجية نظيفة وموجزة.

ستُنشئ ملفين لتنظيم تعليماتك البرمجية:

  • Product.cs: عرّف فئة Product في مساحة الأسماء Store. يجب أن توضّح هذه الفئة أعضاءً مختلفين ذوي صياغة تعبيرية:
    • خاصية Name (string) مُنفَّذة تلقائيًا، وخاصية BasePrice (decimal)
    • مُنشئًا ذا صياغة تعبيرية يعيّن الخاصيتين معًا
    • خاصية للقراءة فقط TaxAmount ذات صياغة تعبيرية تحسب 10% من السعر الأساسي
    • خاصية للقراءة فقط TotalPrice ذات صياغة تعبيرية تُرجع السعر الأساسي مضافًا إليه مبلغ الضريبة
    • أسلوبًا 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.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00

نسّق كل قيمة نقدية بحيث تحتوي على منزلتين عشريتين بالضبط، مثل value.ToString("F2") أو $"{value:F2}". وينطبق ذلك على السعر الأساسي والضريبة والإجمالي والخصم والسعر النهائي على حد سواء.

تذكّر استخدام صياغة السهم => لجميع الأعضاء التي تحتوي على تعبير واحد. فهذا يحافظ على نظافة تعليماتك البرمجية وسهولة قراءتها!

جرّب بنفسك

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اختبر نفسك

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

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C# عبر الإنترنت