البرمجة الإجرائية Procedural programming

البرمجة الإجرائية (Procedural Programming) – شرح مفصل

1. ما هي البرمجة الإجرائية؟

البرمجة الإجرائية (Procedural Programming) هي نموذج برمجي يعتمد على تقسيم الكود إلى إجراءات (Functions أو Procedures)، بحيث يكون لكل إجراء وظيفة محددة. يتم تنفيذ الكود خطوة بخطوة وفقًا لتسلسل منطقي، مما يجعل البرنامج أشبه بسلسلة من التعليمات التي يتم تنفيذها واحدة تلو الأخرى.

2. الخصائص الأساسية للبرمجة الإجرائية

  • تقسيم البرنامج إلى إجراءات: يعتمد هذا النموذج على تقسيم الكود إلى دوال وإجراءات صغيرة تسهّل إعادة الاستخدام والصيانة.
  • التنفيذ المتسلسل (Sequential Execution): يتم تنفيذ التعليمات بترتيب محدد.
  • استخدام المتغيرات العامة والمحلية: يمكن للدوال الوصول إلى المتغيرات وفقًا لنطاقها (Scope).
  • تعديل البيانات باستخدام الدوال: يتم التعامل مع البيانات مباشرة داخل الإجراءات.
  • إعادة استخدام الكود: يمكن استدعاء الإجراءات أكثر من مرة داخل البرنامج.

3. أمثلة على لغات البرمجة الإجرائية

  • C
  • Pascal
  • Fortran
  • BASIC
  • Python (يمكن استخدامها بنمط إجرائي أو كائني OOP)

4. كيفية عمل البرمجة الإجرائية؟

لنأخذ مثالًا عمليًا بلغة C يوضح البرمجة الإجرائية:

#include <stdio.h>

// تعريف دالة لحساب مجموع رقمين
int add(int a, int b) {
    return a + b;
}

int main() {
    int num1 = 5, num2 = 10;
    int result = add(num1, num2);
    
    printf("المجموع: %d\n", result);
    return 0;
}

5. مزايا البرمجة الإجرائية

:white_check_mark: سهولة الفهم والتطبيق: الكود منظم ومنطقي، مما يسهل قراءته.
:white_check_mark: إعادة استخدام الكود: يمكن استدعاء الدوال في أماكن مختلفة دون الحاجة إلى كتابة الكود مجددًا.
:white_check_mark: تصحيح الأخطاء وإصلاحها: تقسيم الكود إلى دوال يسهل العثور على الأخطاء وإصلاحها.
:white_check_mark: كفاءة عالية في التعامل مع العمليات الحسابية والمعالجة المباشرة للبيانات.

6. عيوب البرمجة الإجرائية

:x: ضعف التنظيم في المشاريع الكبيرة: كلما زاد حجم المشروع، زادت صعوبة إدارة الكود.
:x: صعوبة التوسع والصيانة: التعديلات قد تؤثر على عدة أجزاء من البرنامج.
:x: ضعف أمان البيانات: لا توفر تحكمًا قويًا في البيانات مثل البرمجة الكائنية (OOP).

7. مقارنة بين البرمجة الإجرائية والبرمجة الكائنية (OOP)

المقارنة البرمجة الإجرائية البرمجة الكائنية (OOP)
المفهوم الأساسي تعتمد على الإجراءات والوظائف تعتمد على الكائنات والصفوف
التعامل مع البيانات البيانات متاحة ويمكن تعديلها بسهولة البيانات محمية داخل الكائنات
إعادة الاستخدام من خلال الدوال والإجراءات من خلال الوراثة والتعددية
الملاءمة للمشاريع الكبيرة أقل كفاءة أكثر كفاءة وتنظيماً
الصيانة والتطوير أصعب في المشاريع الضخمة أسهل بسبب الكبسلة والتجريد

8. متى تستخدم البرمجة الإجرائية؟

  • عندما تحتاج إلى برامج صغيرة أو متوسطة الحجم مثل الأدوات الحسابية البسيطة.
  • عند تنفيذ عمليات حسابية مكثفة، حيث تكون أسرع من البرمجة الكائنية في بعض الحالات.
  • في برامج النظام منخفضة المستوى مثل أنظمة التشغيل والأدوات البرمجية الأساسية.

9. خاتمة

البرمجة الإجرائية نموذج قوي وفعال، خاصة عند التعامل مع المهام المتسلسلة والمباشرة. لكنها قد تكون غير مناسبة للمشاريع الكبيرة والمعقدة، حيث تكون البرمجة الكائنية (OOP) أكثر تنظيمًا وقابلية للتطوير. لذا، من المهم فهم متى تستخدم كل نموذج لتحقيق أفضل أداء وكفاءة في البرمجة.

4 إعجابات

الشرح واضح ومنظم ما شاء الله

جزيل الشكر لمجهودك :dizzy:

4 إعجابات

شكرا ل Chatgpt… … :grin: :grin:

3 إعجابات

نفس الطريقة التي استخدمها في شرح معظم الاشياء التي اضعها في المنتدى :grin:

3 إعجابات

:cat_with_tears_of_joy:
الاعتراف بالحق فضيلة :+1:
وكذلك شكرا انك نشرت المعلومات :dizzy:

5 إعجابات

يوووه :cat_with_tears_of_joy:
هل انا الوحيدة التي لا استخدمه؟ :sweat_smile:
حسنا المهم هو الاستفادة والمراجعة
أيضا شكرا لنشر المعلومات :dizzy:

4 إعجابات

طيب بما أن الأمر سهل بالنسبة لكم أريد ملخصا عن Dictionary
فكلما اضررت للانقطاع فترة انساه واعود للبحث في مشاريعي القديمة لأتذكر التفاصيل

لازم استغل الموقف لصالحي :cat_with_tears_of_joy: :smiling_face_with_halo:

4 إعجابات

هناك بعض الأمور التي لم ندرسها…لكنها بسيطة للغاية لا تحتاج درس خاص…هي فقط عبارة عن methods…أرجو أن يفيدكم هذا…دعوة خير ولكم بالمثل…

:pushpin: ملخص شامل عن القواميس في بايثون (Dictionaries)

(مع شرح يسير + أمثلة بسيطة لكل نقطة)


:small_blue_diamond: 1. تعريف القاموس

القاموس هو نوع بيانات في بايثون يُستخدم لتخزين أزواج مفتاح: قيمة (key: value).
كل مفتاح (Key) يجب أن يكون فريدًا وغير قابل للتغيير (مثل نصوص أو أرقام أو ** tuples**).
أما القيم (Values) فيمكن أن تكون أي نوع بيانات.

:small_blue_diamond: مثال:

student = {
    "name": "Alice",
    "age": 22,
    "grades": [90, 85, 88]
}
print(student)

:white_check_mark: الإخراج:

{'name': 'Alice', 'age': 22, 'grades': [90, 85, 88]}

:small_blue_diamond: 2. إنشاء قاموس

:white_check_mark: :pushpin: 1) باستخدام {}

person = {"name": "Bob", "age": 30}

:white_check_mark: :pushpin: 2) باستخدام dict()

person = dict(name="Bob", age=30)

:white_check_mark: :pushpin: 3) قاموس فارغ

empty_dict = {}
empty_dict = dict()

:small_blue_diamond: 3. الوصول إلى القيم (get, [])

:white_check_mark: :pushpin: 1) باستخدام الأقواس []

person = {"name": "Bob", "age": 30}
print(person["name"])  # ✅ Output: Bob

:warning: تحذير: إذا كان المفتاح غير موجود، سيحدث خطأ KeyError.

:white_check_mark: :pushpin: 2) باستخدام .get()

print(person.get("name"))  # ✅ Output: Bob
print(person.get("salary", "Not Found"))  # ✅ Output: Not Found

:+1: ميزة .get() أنها لا تُسبب خطأ عند عدم وجود المفتاح.


:small_blue_diamond: 4. تعديل وإضافة القيم

:white_check_mark: :pushpin: 1) تعديل قيمة موجودة

person["age"] = 35
print(person)  # ✅ Output: {'name': 'Bob', 'age': 35}

:white_check_mark: :pushpin: 2) إضافة مفتاح جديد

person["city"] = "New York"
print(person)  # ✅ Output: {'name': 'Bob', 'age': 35, 'city': 'New York'}

:small_blue_diamond: 5. حذف العناصر (del, pop, popitem, clear)

:white_check_mark: :pushpin: 1) باستخدام del

del person["age"]
print(person)  # ✅ Output: {'name': 'Bob', 'city': 'New York'}

:white_check_mark: :pushpin: 2) باستخدام pop()

city = person.pop("city")
print(city)  # ✅ Output: New York
print(person)  # ✅ Output: {'name': 'Bob'}

:white_check_mark: :pushpin: 3) حذف آخر عنصر (popitem())

last_item = person.popitem()
print(last_item)  # ✅ Output: ('name', 'Bob')
print(person)  # ✅ Output: {}

:white_check_mark: :pushpin: 4) حذف جميع العناصر (clear())

person.clear()
print(person)  # ✅ Output: {}

:small_blue_diamond: 6. التكرار على القاموس

:white_check_mark: :pushpin: 1) التكرار على المفاتيح

for key in person:
    print(key)

:white_check_mark: :pushpin: 2) التكرار على القيم

for value in person.values():
    print(value)

:white_check_mark: :pushpin: 3) التكرار على المفاتيح والقيم (items())

for key, value in person.items():
    print(f"{key}: {value}")

:small_blue_diamond: 7. العمليات على القواميس

:white_check_mark: :pushpin: 1) عدد العناصر (len())

print(len(person))  # ✅ Output: 2

:white_check_mark: :pushpin: 2) التحقق من وجود مفتاح (in)

print("name" in person)  # ✅ Output: True

:white_check_mark: :pushpin: 3) دمج قاموسين (update())

person.update({"job": "Engineer", "city": "Paris"})
print(person)

:white_check_mark: الإخراج:

{'name': 'Bob', 'job': 'Engineer', 'city': 'Paris'}

:small_blue_diamond: 8. إنشاء قاموس بطرق متقدمة

:white_check_mark: :pushpin: 1) باستخدام fromkeys()

keys = ["name", "age", "job"]
default_value = "Unknown"
person = dict.fromkeys(keys, default_value)
print(person)

:white_check_mark: الإخراج:

{'name': 'Unknown', 'age': 'Unknown', 'job': 'Unknown'}

:white_check_mark: :pushpin: 2) باستخدام Dictionary Comprehension

squares = {x: x*x for x in range(1, 6)}
print(squares)

:white_check_mark: الإخراج:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

:small_blue_diamond: 9. جميع الأخطاء الممكنة في القواميس

:cross_mark: 1) KeyError – محاولة الوصول إلى مفتاح غير موجود

print(person["salary"])  # ❌ KeyError

:check_mark: الحل: استخدم get() بدلًا من [].

:cross_mark: 2) TypeError – عند استخدام مفتاح غير قابل للتغيير

invalid_dict = {[1, 2, 3]: "List Key"}  # ❌ TypeError

:check_mark: الحل: استخدم مفتاح غير قابل للتغيير مثل tuple.


:small_blue_diamond: 10. خلاصة سريعة

:white_check_mark: تعريف القاموس: يحتوي على أزواج مفتاح: قيمة.
:white_check_mark: إنشاء القواميس: {} أو dict().
:white_check_mark: الوصول إلى القيم: [] أو .get().
:white_check_mark: التعديل والإضافة: dict[key] = value.
:white_check_mark: الحذف: del, pop(), popitem(), clear().
:white_check_mark: التكرار: keys(), values(), items().
:white_check_mark: الوظائف الشائعة: len(), in, update().
:white_check_mark: **أخطاء شائعة

4 إعجابات

ما شاء الله جدا جميل وفيه معلومات جديدة أعجبتني كثيرا
شكرا جدا لك ويا رب يحقق لك حلمك وتصبح من المبرمجين الأكثر احترافا على مستوى العالم :dizzy:

4 إعجابات