هياكل البيانات العامة
تعرّفوا إلى نمط دالة تعيد نوعاً
هياكل البيانات العامة درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
الحاويات العامة في Zig
لجعل بنية بيانات تعمل مع أي نوع من العناصر، اكتبوا دالة تأخذ نوعًا وتُرجع نوع struct جديدًا تمامًا. 📦
دالة تُرجع نوعًا
الفكرة هي أن الدالة يمكن أن يكون نوع إرجاعها type. فهي تحسب نوعًا جديدًا وتعيده وقت الترجمة.
fn List(comptime T: type) type {
return struct {};
}بناء struct من الداخل
داخل الدالة، عرّفوا struct تستخدم حقوله معامل النوع T. وينتج كل استدعاء struct مهيأً لنوع العنصر ذلك.
fn Box(comptime T: type) type {
return struct { value: T };
}تسمية النوع الناتج
استدعوا الدالة التي تُرجع نوعًا وخزّنوا الناتج في const. والآن لديكم نوع محدد جاهز للاستخدام.
const IntBox = Box(i32);إنشاء مثيل
استخدموا ذلك النوع المسمى مثل أي struct. ننشئ هنا Box يحتفظ بالعدد الصحيح اثنين وأربعين.
const b = IntBox{ .value = 42 };إضافة أساليب إلى struct الداخلي
يمكن أن يحتوي struct المُرجع على أساليب أيضًا. وترى هذه الأساليب معامل النوع، ولذلك تظل عامة بالكامل.
fn Box(comptime T: type) type {
return struct {
value: T,
fn get(self: @This()) T {
return self.value;
}
};
}الوصول إلى النوع باستخدام @This
داخل struct مُرجع مجهول لا يمكنكم تسميته مباشرة، ولذلك تستخدم الأساليب @This() للإشارة إلى نوع struct المحتوي.
self: @This()أنواع متعددة من تعريف واحد
استدعوا الدالة بأنواع مختلفة لتحصلوا على structs متميزة. إن Box(i32) وBox(f64) نوعان منفصلان ومتحقق منهما بالكامل.
const FloatBox = Box(f64);هذا ما يدعم المكتبة القياسية
إن ArrayList وHashMap الخاصين بـ Zig مبنيان بالطريقة نفسها تمامًا: دوال تأخذ نوعًا وتُرجع نوع حاوية مهيأً.
const Ints = std.ArrayList(i32);تُحسم العملية بالكامل وقت الترجمة
تحدث كل عملية بناء الأنواع هذه أثناء البناء، ولذلك تملك الحاوية العامة التكلفة نفسها التي تملكها حاوية مكتوبة يدويًا.
حمل allocator عند التوسّع
تخزّن الحاويات القابلة للتوسّع حقل allocator، ويُمرّر عند التهيئة، بحيث يظل النوع العام واضحًا بشأن مصدر ذاكرته.
return struct {
items: []T,
alloc: std.mem.Allocator,
};تحقق سريع
تريدون مكدسًا عامًا يعمل مع أي نوع عنصر في Zig. ما النمط الذي تستخدمونه؟
مراجعة
اكتبوا دالة تأخذ type وتُرجع نوع struct. وينتج كل استدعاء حاوية محددة ومخصصة. هكذا تنشئ std مجموعاتها. 🎯
تعلم Zig مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «هياكل البيانات العامة» مجاني؟
نعم — نص درس «هياكل البيانات العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «هياكل البيانات العامة»؟
تعرّفوا إلى نمط دالة تعيد نوعاً تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «هياكل البيانات العامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- دوال تتلقى نوعاً
- هياكل البيانات العامة
- @TypeOf وتأمل الأنواع
- معاملات anytype