معاملات anytype
اقبلوا أي وسيط باستخدام الكتابة بأسلوب duck typing
معاملات anytype درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
قبول أي شيء باستخدام anytype
أحيانًا لا تريدون تسمية النوع مطلقًا. صرّحوا عن المعامل على أنه anytype، وستستنتج Zig نوعه من المعامل. 🦆
fn show(x: anytype) void {}يُستنتج النوع عند الاستدعاء
مع anytype لا يوجد معامل نوع في البداية. ويحدد معامل كل مستدعٍ النوع الملموس لذلك التخصيص.
show(42);
show(true);هذا هو Duck Typing
تتحقق Zig فقط من أن عمليات الجسم تعمل مع المعامل الذي تمرّرونه. فإذا كان يملك البنية المناسبة، فهو صالح. وهذا هو duck typing.
استعادة النوع عند الحاجة
داخل الدالة، يمكنكم مع ذلك طلب النوع باستخدام @TypeOf، ثم استخدامه للمتغيرات المحلية أو قيم الإرجاع.
fn dup(x: anytype) @TypeOf(x) {
return x;
}مفيد جدًا للمساعدات الشبيهة بالطباعة
تحب الدوال التي تعمل مع بنيات متعددة استخدام anytype. وتقبل print الخاصة بـ Zig نفسها tuple من معاملات anytype لتنسيقها.
std.debug.print("{any}\n", .{x});تأتي القيود من الجسم
لا توجد واجهة صريحة. فإذا استدعيتم x.len من الداخل، فلن تُترجم إلا المعاملات التي تملك فعلًا حقل len.
fn size(x: anytype) usize {
return x.len;
}الأخطاء خاصة بكل تخصيص
إذا مرّر أحد المستدعين نوعًا لا يستطيع الجسم التعامل معه، فستُبلغ Zig عن الخطأ في موضع الاستدعاء، مع تسمية النوع المحدد الذي فشل.
التحقق من المدخلات باستخدام comptime
للحصول على أخطاء أوضح، يمكنكم فحص النوع مبكرًا باستخدام @typeInfo ورفض البنية الخاطئة عبر فحص وقت الترجمة.
anytype في مقابل comptime T: type
استخدموا comptime T: type عندما يتعين تسمية النوع مسبقًا، واستخدموا anytype عندما تكون الاستنتاجية والمرونة أهم.
لا تزال التكلفة وقت التشغيل صفرًا
مثل كل نوع عام في Zig، تُخصّص دالة anytype وقت الترجمة، ولذلك لا تكلف المرونة المستنتجة شيئًا عند تشغيل البرنامج.
مزج anytype مع الأنواع المسماة
يمكن للدالة الجمع بين الأسلوبين: معامل anytype واحد لإدخال مرن إلى جانب معاملات عادية محددة النوع للبيانات الثابتة.
fn join(sep: u8, x: anytype) void {
_ = sep;
_ = x;
}تحقق سريع
كتبتم fn show(x: anytype). كيف تحدد Zig النوع الملموس لـ x؟
مراجعة
تتيح الكلمة المفتاحية anytype للمعامل قبول أي قيمة، مع استنتاج النوع والتحقق من الجسم في كل استدعاء. وهذا هو أسلوب duck typing المرن في Zig. 🎯
تعلم Zig مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «معاملات anytype» مجاني؟
نعم — نص درس «معاملات anytype» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «معاملات anytype»؟
اقبلوا أي وسيط باستخدام الكتابة بأسلوب duck typing تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «معاملات anytype»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- دوال تتلقى نوعاً
- هياكل البيانات العامة
- @TypeOf وتأمل الأنواع
- معاملات anytype