مقدّمة إلى المصفوفات
مقدّمة إلى المصفوفات
حتى الآن كل متغيّر صرّحتَ به يحمل قيمة واحدة — int واحد أو String واحد وهكذا. لكن ماذا لو احتجتَ إلى تخزين درجات ثلاثين طالبًا، أو أسماء أيام الأسبوع؟ إنشاء ثلاثين متغيّرًا منفصلًا أمرٌ مرهق وغير عملي. تحلّ المصفوفات هذه المشكلة بتجميع قيم متعدّدة من النوع ذاته تحت اسم واحد.
ما هي المصفوفة؟
المصفوفة هي مجموعة مُرتَّبة ذات حجم ثابت تحتوي على قيم تشترك جميعها في النوع نفسه. تخيّلها كصفٍّ من الصناديق المرقّمة: كل صندوق يحمل قيمة واحدة، ولكل صندوق رقم موضع يُسمّى الفهرس.
- يجب أن يكون كل عنصر في المصفوفة من النوع ذاته (مثلاً كلّها
intأو كلّهاString). - حجم المصفوفة ثابت عند إنشائها — لا يمكنك تصغيرها أو تكبيرها لاحقًا.
- تبدأ الفهارس من 0 وليس من 1.
التصريح عن مصفوفة
يُوضَع قوسا الفهرسة إما بعد النوع أو بعد اسم المتغيّر. الأسلوب المعتاد في جافا هو وضعهما بعد النوع:
التصريح وحده لا يُنشئ المصفوفة بعد — بل يحجز اسمًا سيُشير إلى مصفوفة عند إنشائها.
تهيئة المصفوفة
ثمّة طريقتان شائعتان لمنح المصفوفة قيمها.
1. التخصيص بـ new ثم الإسناد عنصرًا بعنصر
استخدم new int[5] لإنشاء مصفوفة تستوعب 5 أعداد صحيحة تمامًا. تملأ جافا جميع الخانات بالقيمة الافتراضية للنوع — 0 للأنواع العددية، وfalse لـ boolean، وnull للكائنات.
2. مُهيِّئ المصفوفة (التصريح والتعبئة دفعةً واحدة)
إذا كنتَ تعرف القيم مسبقًا، يمكنك توفيرها داخل قوسين معكوفين. تحسب جافا عددها وتضبط الحجم تلقائيًا.
قراءة طول المصفوفة
تكشف كل مصفوفة عن حقل length (وليس تابعًا — لا أقواس) يُعيد عدد الخانات التي أُنشئت بها:
يعكس length دائمًا سعة المصفوفة لا عدد العناصر غير الصفرية أو غير الـ null. مصفوفة أُنشئت بـ new int[10] يساوي length فيها 10 دائمًا حتى لو ملأتَ ثلاث خانات فقط.
الوصول إلى العناصر وتعديلها
اقرأ أي عنصر أو عدّله باستخدام فهرسه بين قوسين معكوفين:
استثناء ArrayIndexOutOfBoundsException
أكثر أخطاء المصفوفات شيوعًا هو استخدام فهرس غير موجود — سواء أكان سالبًا أم مساويًا لطول المصفوفة أم أكبر منه. تُلقي جافا في هذه الحالة استثناء ArrayIndexOutOfBoundsException وقت التشغيل ويتوقّف البرنامج ما لم تعالج الاستثناء.
n عنصرًا فالفهرس الأخير الصالح هو n - 1. الوصول إلى array[array.length] يكون دائمًا خارج الحدود. في حالة الشك، قارن فهرسك بـ array.length - 1.
النمط الآمن هو استخدام length دائمًا عند حساب الفهرس الأخير بدلًا من رقم ثابت مُضمَّن:
مثال متكامل
يجمع المقطع التالي كل ما تعلّمناه: التصريح والتهيئة وقراءة الطول والوصول إلى العناصر وتحديث قيمة.
الخلاصة
تتيح لك المصفوفات تخزين قيم متعدّدة من النوع ذاته تحت اسم واحد. صرّح عنها بـ type[]، وأنشئها بـ new type[size] أو بمُهيِّئ، وصِل إلى عناصرها بفهرس يبدأ من الصفر. استخدم .length لمعرفة الحجم، واحرص دائمًا على أن تبقى فهارسك بين 0 وlength - 1 لتجنّب استثناء ArrayIndexOutOfBoundsException. الدرس التالي يبني على هذا الأساس ويريك كيف تُكرّر على عناصر المصفوفة وتُجري عليها عمليات شائعة.