0Pricing
C# Academy · درس

النوع Index والعامل ^

أشيروا إلى العناصر بدءًا من نهاية المجموعة

النوع Index والعامل ^ درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

التعرّف على نوع Index

توفّر C# نوعًا مخصصًا هو System.Index لوصف موضع داخل تسلسل. وعلى خلاف int العادي، يمكن لـ Index تمثيل موضع يُحسب من نهاية مجموعة، وليس من بدايتها فقط.

وهذا يجعل عبارات مثل «أعطني العنصر الأخير» واضحة وآمنة.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10

المعامل ^ (من النهاية)

ينشئ معامل القبعة ^ كائن Index يحسب الموضع من النهاية. يشير ^1 إلى العنصر الأخير، و^2 إلى ما قبل الأخير، وهكذا.

لاحظوا أن ^1 هو آخر فهرس صالح، بينما يساوي ^0 القيمة Length ويقع موضعًا واحدًا بعد النهاية.

using System;

int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40

Index كقيمة من الدرجة الأولى

إن Index قيمة حقيقية يمكنكم تخزينها في متغير، وتمريرها إلى الأساليب، وإعادة استخدامها. وهذا يفصل بين الموضع والمجموعة.

using System;

int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]);       // 5
Console.WriteLine(data[secondLast]); // 4

‏IsFromEnd وValue

يكشف كل Index عن خاصيتين: Value (الإزاحة الصحيحة) وIsFromEnd (ما إذا كان قد أُنشئ باستخدام ^).

using System;

Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd);     // 2 True

يحدد GetOffset الموضع

لا يكون الفهرس المحسوب من النهاية ذا معنى إلا بعد معرفة طول المجموعة. يحوّل Index.GetOffset(length) هذا الفهرس إلى إزاحة ملموسة تبدأ من الصفر.

using System;

Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4

‏^0 يقع بعد النهاية مباشرةً

بما أن ^0 يتحول إلى Length، فإن الفهرسة باستخدامه تؤدي إلى استثناء. ولا يفيد إلا باعتباره الحد الأعلى الحصري لنطاق، وهو ما ستتعلمونه في الدرس التالي.

using System;

int[] data = { 1, 2, 3 };
try {
    Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
    Console.WriteLine("^0 is past the end");
}

يعمل Index مع مجموعات متعددة

يمكن لأي نوع يوفّر مفهرسًا بالإضافة إلى خاصية Length أو Count (مع الدعم المناسب) استخدام Index. وتعمل المصفوفات وstring وSpan<T> مباشرةً.

using System;

string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // C

الحساب الديناميكي للفهارس

يمكنكم إنشاء Index من عدد صحيح وقت التشغيل باستخدام معامل ^ مع متغير.

using System;

int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n;            // ^ works on variables too
Console.WriteLine(data[idx]); // 15

‏Index في مقابل int العادي

يحسب int العادي دائمًا من البداية. ويضيف Index إمكانية الحساب من النهاية، مع استمرار التحويل الضمني من int، لذا يظل الكود الموجود صالحًا للعمل.

using System;

Index a = 1;   // implicit from int
Index b = ^1;  // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // True

تجنب أخطاء الفرق بمقدار واحد

كان الوصول إلى العنصر الأخير يتطلب كتابة arr[arr.Length - 1]. أما باستخدام ^1، فالغرض واضح ولا توجد عملية حسابية يمكن أن تخطئوا فيها.

using System;

int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]);                // new way: 95

استخدام Index في كود فعلي

إليكم دالة مساعدة صغيرة تعيد العنصر الأخير من أي مصفوفة باستخدام ^1، مع إبقاء موضع الاستدعاء نظيفًا.

using System;

static T Last<T>(T[] items) => items[^1];

int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12

تحقق سريع

اختبروا فهمكم لنوع Index ولمعامل ^.

مراجعة

تعلّمتم أن System.Index يمثّل موضعًا يمكن حسابه من البداية أو، باستخدام معامل ^، من النهاية.

  • يشير ^1 إلى العنصر الأخير، بينما يساوي ^0 القيمة Length (أي يقع موضعًا واحدًا بعد النهاية).
  • يحتوي Index على Value وIsFromEnd وGetOffset(length).
  • يُحوَّل ضمنيًا من int، ويعمل مع المصفوفات والسلاسل النصية والامتدادات.

الأسئلة الشائعة

هل درس «النوع Index والعامل ^» مجاني؟

نعم — نص درس «النوع Index والعامل ^» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «النوع Index والعامل ^»؟

أشيروا إلى العناصر بدءًا من نهاية المجموعة تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «النوع Index والعامل ^»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. النوع Index والعامل ^
  2. النوع Range والعامل ..
  3. النطاقات مع المصفوفات والسلاسل النصية
  4. الأنواع المخصّصة الداعمة للنطاقات
← العودة إلى C# Academy