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

الدوال الساكنة

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

عندما تقسّم الشيفرة عبر عدة files، تكون كل function معرَّفة في source file مرئيةً لـ other files افتراضيًا. لكن أحيانًا تحتاج إلى helper function ينبغي استخدامها only داخليًا: function لا ينبغي لـ other files الوصول إليها أو حتى معرفة وجودها.

الكلمة المفتاحية static، عند تطبيقها على function، تقيّد إمكانية رؤيتها إلى file الذي عُرّفت فيه. ينشئ هذا function خاصة لا يمكن استخدام called عليها من source files أخرى، حتى إذا حاول شخص ما استخدام Declare لها.

// math_utils.c
#include "math_utils.h"

// مساعد خاص - مرئي فقط في هذا الملف
static int square(int x) {
    return x * x;
}

// دالة عامة - يمكن استدعاؤها من main.c
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

في هذا المثال، تم التصريح عن sum_of_squares في الترويسة، ويمكن استخدامها في أي مكان. أما square فهي موسومة بـ static، ولذلك لا توجد إلا داخل math_utils.c. إذا حاولت main.c استدعاء square() مباشرةً، فسيُصدر الرابط خطأً: فالدالة ببساطة لا وجود لها خارج ملفها.

هذه هي طريقة C لتحقيق التغليف على مستوى file. تتيح لك الدوال static إخفاء تفاصيل التنفيذ، مع الحفاظ على Public interface نظيفًا أثناء استخدام أي منطق helper تحتاج إليه داخليًا.

challenge icon

التحدي

سهل

لنبنِ حاسبة مسافة تستخدم دالة مساعدة Private لحساب مربع عدد: وهي تفصيل ينبغي أن يظل مخفيًا عن بقية برنامجك.

ستنشئ أربعة ملفات:

  • distance.h: ملف الترويسة الذي يعلن عن دالة Public واحدة هي distance_squared، والتي تأخذ أربعة أعداد صحيحة (x1, y1, x2, y2) تمثل نقطتين وتُرجع عددًا صحيحًا. استخدم حواجز التضمين بالرمز DISTANCE_H.
  • distance.c: ملف المصدر الذي يحتوي على التنفيذ. أنشئ دالة مساعدة static تُسمى square، وتأخذ عددًا صحيحًا وتُرجع مربعه. يجب أن تكون هذه الدالة المساعدة مرئية only داخل distance.c. ثم Implement الدالة distance_squared using دالتك المساعدة static لحساب (x2-x1)² + (y2-y1)².
  • main.c: ملف main الذي يضمّن الترويسة ويستخدم الدالة Public. يجب ألا تكون الدالة المساعدة square قابلة للوصول هنا؛ إذ إن distance_squared فقط هي المتاحة.

تحسب الدالة distance_squared مربع المسافة الإقليدية بين نقطتين. ومن خلال إبقاء الدالة square static، فإنك تخفي تفصيل التنفيذ هذا عن أي كود خارج distance.c.

ستتلقى أربعة مدخلات من نوع integer: x1 وy1 وx2 وy2.

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

Squared distance: {result}

على سبيل المثال، بالنسبة إلى النقطتين (0, 0) و(3, 4)، سيكون الناتج:

Squared distance: 25

جرّب بنفسك

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

int main() {
    int x1, y1, x2, y2;
    scanf("%d", &x1);
    scanf("%d", &y1);
    scanf("%d", &x2);
    scanf("%d", &y2);
    
    // TODO: استدعِ distance_squared مع إحداثيات الإدخال
    // and print the result in the format: "Squared distance: {result}"
    
    return 0;
}
quiz iconاختبر نفسك

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

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

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