المؤشرات الاختيارية و?*T
اجمعوا بين المؤشرات والقابلية للاختيار
المؤشرات الاختيارية و?*T درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.
يمكن أن تكون المؤشرات اختيارية أيضًا
يجب أن يشير المؤشر عادةً دائمًا إلى قيمة صالحة. وعندما تجعله اختياريًا، يكتسب طريقة مشروعة للتعبير عن عدم وجود قيمة بعد.
صيغة ?*T
يُقرأ النوع ?*T هكذا: مؤشر اختياري إلى T. فهو إما يشير إلى قيمة حقيقية أو يحتوي على null.
var node: ?*Node = null;مؤشر null آمن
هذا هو حل Zig لمؤشرات null في C. يمكن أن يكون المؤشر غائبًا، لكن النوع الاختياري يجبرك على التحقق منه قبل إلغاء الإشارة.
فك التغليف قبل المتابعة
لا يمكنك إلغاء الإشارة إلى ?*T مباشرةً. فك تغليفه أولًا باستخدام if أو orelse لتحصل على المؤشر العادي الموجود بداخله.
if (node) |p| {
use(p.*);
}الالتقاط يمنحك مؤشرًا حقيقيًا
داخل التقاط if، يكون الاسم من النوع *Node العادي، وجاهزًا لإلغاء الإشارة إليه باستخدام .* مثل أي مؤشر غير اختياري.
if (head) |p| {
const value = p.*;
}مفيد جدًا للبنى المترابطة
تتألق المؤشرات الاختيارية في القوائم المترابطة والأشجار، حيث يكون حقل next أو child مساويًا لـ null عند نهاية السلسلة.
const Node = struct { next: ?*Node };null تحدد النهاية
عند اجتياز قائمة، يشير وجود null في حقل next بوضوح إلى وصولك إلى العقدة الأخيرة ووجوب التوقف.
يخزّن Zig الوسم ضمنيًا
بالنسبة إلى المؤشرات، يخزّن Zig حالة null داخل قيمة المؤشر نفسها، ولذلك لا يشغل ?*T مساحة إضافية مقارنةً بمؤشر عادي.
مؤشرات اختيارية ثابتة
يمكنك الجمع بين عدم القابلية للكتابة والاختيارية: ?*const T هو مؤشر اختياري يمكنك القراءة من خلاله، لكن لا يمكنك الكتابة إليه.
var view: ?*const u8 = null;لا أعطال مفاجئة أيضًا
بما أن النوع يوضح أنه قد يكون null، فلن يسمح لك المصرّف بنسيان التحقق، بخلاف إلغاء الإشارة إلى مؤشر C خام.
اجتياز سلسلة
تُعد حلقة while التي تلتقط كل مؤشر next اختياري الطريقة الاصطلاحية لـ اجتياز قائمة حتى ظهور null.
while (cur) |n| {
cur = n.next;
}تحقق سريع
ماذا يصف النوع ?*Node؟
مراجعة
تعلّمت ?*T: مؤشرًا اختياريًا آمنًا. فك تغليفه قبل إلغاء الإشارة إليه، ودع null تحدد نهاية البنى المترابطة. 🔗
الأسئلة الشائعة
هل درس «المؤشرات الاختيارية و?*T» مجاني؟
نعم — نص درس «المؤشرات الاختيارية و?*T» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.
ماذا ستتعلم في «المؤشرات الاختيارية و?*T»؟
اجمعوا بين المؤشرات والقابلية للاختيار تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟
لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «المؤشرات الاختيارية و?*T»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟
نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التصريح عن الأنواع الاختيارية
- إلغاء التغليف بأمان باستخدام if وorelse
- المؤشرات الاختيارية و?*T
- null مقابل undefined