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

الأساليب المساعدة

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

حتى الآن، رأينا دوالًا تعدّل بيانات البنية (مثل player_take_damage) ودوالًا تعرضها ببساطة. لكن هناك فئة مهمة أخرى: دوال تحسب قيمًا مشتقة من أعضاء البنية من دون تغيير أي شيء.

لنفترض بنية Rectangle تخزّن العرض والارتفاع. المساحة غير مخزّنة، بل يتم حسابها عند الطلب:

typedef struct {
    double width;
    double height;
} Rectangle;

double rectangle_area(const Rectangle *self) {
    return self->width * self->height;
}

double rectangle_perimeter(const Rectangle *self) {
    return 2 * (self->width + self->height);
}

هذه هي helper methods. تأخذ البيانات الموجودة في البنية وتنتج قيمة جديدة. لاحظ أنها تستخدم مؤشرات const لأنها تقرأ فقط ولا تكتب مطلقًا. تُعاد النتيجة المحسوبة بدلًا من تخزينها في البنية.

Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box));       // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0

يحافظ هذا النمط على هياكلك بسيطة: خزّن البيانات الأساسية فقط، واحسب كل شيء آخر عند الحاجة. كما يضمن أن تكون القيم المشتقة متسقة دائمًا مع الحالة الحالية.

challenge icon

التحدي

سهل

لنبنِ وحدة Circle تحسب القيم المشتقة من البيانات المخزنة. ستتدرّب على كتابة helper methods: وهي دوال تحسب results من أعضاء البنية دون تعديلها.

ستنشئ ثلاثة ملفات:

  • circle.h: أعلن عن بنية Circle تحتوي على عضو واحد هو double radius. أعلن أيضًا عن طريقتي helper:
    • circle_area: تستقبل مؤشرًا من النوع const إلى Circle وتُرجع area
    • circle_circumference: تستقبل مؤشرًا من النوع const إلى Circle وتُرجع circumference
    استخدم حواجز التضمين بالرمز CIRCLE_H.
  • circle.c: Implement طريقتي helper. بالنسبة إلى الحسابات، استخدم 3.14159 كقيمة للعدد pi. صيغة area هي pi * radius * radius، وصيغة circumference هي 2 * pi * radius. يجب أن تقرأ كلتا الدالتين radius فقط: لا تعدّله أبدًا.
  • main.c: أنشئ Circle واستخدم طريقتي helper لحساب خصائصه وعرضها.

ستتلقى مُدخلًا واحدًا: radius للدائرة (من النوع double).

في ملفك الرئيسي، هيّئ Circle باستخدام radius المُعطى، ثم استخدم طريقتي helper لحساب area وcircumference وطباعتهما.

اطبع results بهذا التنسيق:

Area: {area}
Circumference: {circumference}

استخدم %.2f لكلتا القيمتين لعرض منزلتين عشريتين.

على سبيل المثال، عند استخدام radius بقيمة 5.0، سيكون الناتج:

Area: 78.54
Circumference: 31.42

جرّب بنفسك

#include <stdio.h>
#include "circle.h"

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: أنشئ Circle struct بالنصف القطر المعطى
    
    // TODO: Use circle_area and circle_circumference helper methods
    // لحساب وطباعة النتائج
    
    // تنسيق الطباعة:
    // printf("Area: %.2f\n", ...);
    // printf("Circumference: %.2f\n", ...);
    
    return 0;
}
quiz iconاختبر نفسك

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

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

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