استخدام typedef لأسماء مستعارة للأنواع
جزء من قسم Logic & Flow في رحلة C على Coddy. الدرس 58 من 63.
أحياناً في برمجة C، ستواجه مواقف تكون فيها أسماء أنواع البيانات الحالية إما مطولة جداً أو لا تعبر بوضوح عن غرض برنامجك. توفر الكلمة المفتاحية typedef حلاً من خلال السماح لك بإنشاء أسماء جديدة لأنواع البيانات الموجودة.
فكر في typedef بمثابة إنشاء اسم مستعار أو كنية لنوع بيانات. الصيغة الأساسية بسيطة:
typedef existing_type new_name;على سبيل المثال، يمكنك إنشاء اسم أكثر وصفاً لنوع البيانات int:
typedef int Integer;بعد هذا التصريح، يمكنك استخدام Integer في أي مكان تستخدم فيه عادةً int. كلاهما int count = 5; و Integer count = 5; يؤديان نفس الشيء تماماً، ولكن النسخة الثانية قد تكون أكثر دلالة في سياقات معينة.
تصبح هذه الميزة ذات قيمة خاصة عند التعامل مع أنواع بيانات معقدة أو عندما تريد جعل الكود الخاص بك أكثر توثيقاً ذاتياً وأسهل في الصيانة.
التحدي
سهلقم بإنشاء برنامج بلغة C يوضح استخدام typedef لإنشاء أسماء مستعارة (aliases) ذات معنى لأنواع البيانات لنظام مراقبة درجة الحرارة. يجب أن يقوم برنامجك بما يلي:
- إنشاء الأسماء المستعارة التالية للأنواع باستخدام
typedef:- إنشاء اسم مستعار للنوع
Temperatureبدلاً منfloat - إنشاء اسم مستعار للنوع
SensorIDبدلاً منint - إنشاء اسم مستعار للنوع
Statusبدلاً منint
- إنشاء اسم مستعار للنوع
- في الدالة الرئيسية (main function):
- قم بالتصريح عن متغير من النوع
SensorIDباسمsensor - قم بالتصريح عن متغير من النوع
TemperatureباسمcurrentTemp - قم بالتصريح عن متغير من النوع
Temperatureباسمthreshold - قم بالتصريح عن متغير من النوع
StatusباسمalertStatus - اقرأ أربع قيم من المدخلات بهذا الترتيب: معرف المستشعر (sensor ID)، درجة الحرارة الحالية، درجة حرارة العتبة (threshold temperature)، وحالة التنبيه (alert status)
- قم بتعيين قيم المدخلات هذه للمتغيرات المقابلة
- اطبع معلومات المستشعر بهذا التنسيق الدقيق:
Sensor ID: [sensor_id]Current Temperature: [current_temp]Threshold: [threshold_temp]Alert Status: [alert_status]
- قم بإجراء تحليل لدرجة الحرارة واطبع النتائج:
- احسب فرق درجة الحرارة (درجة الحرارة الحالية ناقص العتبة) وقم بتخزينه في متغير من النوع
Temperatureباسمdifference - اطبع الفرق بهذا التنسيق الدقيق:
Temperature Difference: [difference] - حدد فئة درجة الحرارة بناءً على درجة الحرارة الحالية:
- إذا كانت درجة الحرارة أقل من 0.0: اطبع
Category: Freezing - إذا كانت درجة الحرارة بين 0.0 و 25.0 (شاملة): اطبع
Category: Normal - إذا كانت درجة الحرارة أعلى من 25.0: اطبع
Category: Hot
- إذا كانت درجة الحرارة أقل من 0.0: اطبع
- تحقق مما إذا كان يجب تفعيل التنبيه:
- إذا كانت درجة الحرارة الحالية أكبر من العتبة وَ كانت حالة التنبيه هي 1: اطبع
Alert: Temperature exceeded threshold! - خلاف ذلك: اطبع
Alert: No alert triggered
- إذا كانت درجة الحرارة الحالية أكبر من العتبة وَ كانت حالة التنبيه هي 1: اطبع
- احسب فرق درجة الحرارة (درجة الحرارة الحالية ناقص العتبة) وقم بتخزينه في متغير من النوع
- قم بالتصريح عن متغير من النوع
يوضح هذا التحدي كيف تجعل typedef الكود أكثر توثيقاً ذاتياً وأسهل في الفهم. بدلاً من استخدام أنواع عامة مثل int و float في جميع أنحاء برنامجك، ستستخدم أسماءً ذات معنى مثل SensorID و Temperature و Status والتي تشير بوضوح إلى الغرض من كل متغير. يعمل هذا النهج على تحسين قابلية قراءة الكود ويجعل من السهل صيانة برامجك وتعديلها.
جرّب بنفسك
#include <stdio.h>
// TODO: قم بإنشاء أسماء مستعارة (typedef aliases) هنا
int main() {
// TODO: قم بالتصريح عن المتغيرات باستخدام الأسماء المستعارة (typedef aliases)
// قراءة قيم المدخلات
scanf("%d", &sensor);
scanf("%f", ¤tTemp);
scanf("%f", &threshold);
scanf("%d", &alertStatus);
// TODO: اكتب الكود الخاص بك أدناه لطباعة معلومات المستشعر وإجراء التحليل
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف7الهياكل (structs)
ما هو الـ Struct؟الإعلان عن Structإنشاء متغيرات Structالوصول إلى أعضاء الـ Structتهيئة الـ Structsمراجعة: Struct بيانات الطالب10Enums و Typedef
enum للثوابت المسماةالتصريح عن Enums واستخدامهااستخدام Enums في جمل Switchاستخدام typedef لأسماء مستعارة للأنواعاستخدام typedef مع Structsمراجعة: تمارين على Typedef و Enum2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسيةتدرّب بنفسك: مترجم C عبر الإنترنت