المكتبة

Chapter 11: Arrays & Collections - The Art of List-Making

# الفصل 11: المصفوفات والمجموعات.. فن صناعة القوائم {: .story-title .anim-fade-in} ## المشكلة: فوضى المتغيرات {: .story-heading .anim-slide-up} تخيل أنك تريد حفظ قائمة بأسماء أصدقائك. بدون معرفة برمجية متقدمة، قد تفعل شيئًا كهذا: `let friend1 = "Ali";` `let friend2 = "Fatima";` `let friend3 = "Yusuf";` يعمل هذا لثلاثة أصدقاء. لكن ماذا لو كان لديك 30 صديقًا؟ أو 300؟ ماذا لو أردت إضافة صديق جديد؟ أو حذف أحدهم؟ ستجد نفسك غارقًا في بحر من المتغيرات التي لا يمكن إدارتها. ستضطر إلى إعادة تسمية كل شيء، وكتابة منطق معقد فقط للبحث عن اسم. هذه ليست برمجة، هذه فوضى. البرمجة الحقيقية تدور حول إيجاد هياكل ذكية لإدارة البيانات. أنت لا تحتاج إلى مليون متغير فردي، بل تحتاج إلى حاوية واحدة ذكية يمكنها استيعاب عدد لا نهائي من العناصر. حاوية تتيح لك الإضافة، الحذف، البحث، والترتيب بسهولة. هذه الحاوية هي **المصفوفة (Array)**. إنها أول وأهم هيكل بيانات ستتعلمه، وهي الأداة التي تحول الفوضى إلى نظام. بدونها، تطبيقات مثل فيسبوك (قائمة المنشورات)، سبوتيفاي (قائمة الأغاني)، أو أمازون (قائمة المنتجات) ستكون مستحيلة. {: .story-content .page-1 .page-type-text .anim-fade-in dir="rtl" data-music="tech-beat.mp3"} --- ## المفهوم الأساسي: الحاوية المرقمة {: .story-heading .anim-slide-up} ببساطة مطلقة، **المصفوفة (Array)** هي قائمة مرتبة من العناصر، موضوعة في حاوية واحدة. فكر فيها كخزانة ملفات، حيث كل درج له رقم. **أهم قاعدتين يجب أن تعرفهما:** 1. **إنها قائمة:** يمكنك وضع أي شيء فيها. أرقام، نصوص، كائنات (Objects)، وحتى مصفوفات أخرى. 2. **إنها مرقمة (مُفهرسة):** لكل عنصر داخل المصفوفة عنوان رقمي فريد يسمى **الفهرس (Index)**. هذا هو ما يسمح لك بالوصول إلى أي عنصر مباشرة. وهنا تأتي الصدمة الأولى لكل مبتدئ: **الفهرسة في البرمجة تبدأ من الصفر (0)، وليس من واحد.** لماذا؟ السبب تاريخي وتقني بحت، يتعلق بكيفية وصول الكمبيوتر إلى البيانات في الذاكرة. الفهرس هو في الواقع "الإزاحة" (Offset) من عنوان بداية المصفوفة في الذاكرة. العنصر الأول لا يحتاج إلى إزاحة، لذا ففهرسه هو 0. العنصر الثاني يحتاج إلى إزاحة بمقدار عنصر واحد، لذا ففهرسه هو 1، وهكذا. لا تشغل بالك بالتفاصيل التقنية الآن. فقط احفر هذه الحقيقة في عقلك: **العنصر الأول دائمًا في الفهرس 0.** للوصول إلى "Fatima" في مصفوفتنا، لن نكتب `friends[2]` بل `friends[1]`. هذا الخطأ، الذي يسمى "Off-by-one error"، هو أشهر خطأ يقع فيه المبرمجون الجدد. إتقان هذا المفهوم البسيط هو بوابتك لفهم كيفية تنظيم البيانات ومعالجتها على نطاق واسع. {: .story-content .page-2 .page-type-text .anim-fade-in dir="rtl"} --- ## لماذا هذا مهم؟ ما وراء القائمة البسيطة {: .story-heading .anim-slide-up} قد تبدو المصفوفة بسيطة، لكنها حجر الأساس لهياكل أكثر تعقيدًا. فهمك للمصفوفات يفتح لك الباب لفهم عائلة كاملة من "المجموعات" (Collections)، ولكل منها قوتها الخارقة. **المصفوفة (Array): الخيار الافتراضي** * **متى تستخدمها:** عندما تحتاج إلى قائمة مرتبة من العناصر، ولا يهمك تكرارها. هي الأنسب عندما يكون ترتيب العناصر مهمًا (مثل خطوات وصفة، أو قائمة مهام). * **مثال:** قائمة المنتجات في عربة التسوق. **المجموعة (Set): حارس التفرد** * **ما هي:** تشبه المصفوفة، لكنها تضمن عدم وجود أي عنصر مكرر. إذا حاولت إضافة عنصر موجود بالفعل، سيتم تجاهله ببساطة. * **متى تستخدمها:** عندما تريد التأكد من أن كل قيمة فريدة. * **مثال:** قائمة "تاجات" (tags) لمقالة مدونة. لا تريد أن يظهر نفس التاج مرتين. **القاموس/الخريطة (Dictionary/Map): للبحث الفوري** * **ما هو:** ليس قائمة مرقمة، بل مجموعة من أزواج "مفتاح-قيمة" (Key-Value Pairs). بدلاً من استخدام فهرس رقمي (0, 1, 2)، أنت تحدد "مفتاحًا" نصيًا فريدًا لكل قيمة. * **متى تستخدمه:** عندما تحتاج إلى البحث عن قيمة بسرعة فائقة باستخدام معرّف فريد. * **مثال:** بيانات مستخدم. بدلاً من البحث في مصفوفة ضخمة، يمكنك الوصول إلى بياناته مباشرة باستخدام `user['email']` أو `user['userId']`. هذا أسرع بآلاف المرات من المرور على كل عنصر في مصفوفة. اختيار هيكل البيانات الصحيح هو علامة المهندس المحترف. المبتدئ يستخدم المصفوفات لكل شيء. المحترف يسأل نفسه: "هل الترتيب مهم؟ هل التفرد مطلوب؟ هل أحتاج إلى بحث سريع؟" ثم يختار الأداة المناسبة للمهمة. هذا هو الفرق بين كتابة كود يعمل، وكتابة كود يعمل بكفاءة. {: .story-content .page-3 .page-type-text .anim-fade-in dir="rtl"} --- ## نصائح عملية: كيف تتقن فن القوائم {: .story-heading .anim-slide-up} المعرفة النظرية لا تكفي. إليك كيف تحول هذا المفهوم إلى مهارة عملية: 1. **احفر قاعدة "الفهرس صفر" في عقلك:** عندما تتعامل مع مصفوفة، أول سؤال تطرحه على نفسك هو: "ما هو فهرس العنصر الأخير؟" الإجابة دائمًا هي `(طول المصفوفة - 1)`. إذا كان لديك 10 عناصر، ففهرس العنصر الأخير هو 9. اجعل هذا التفكير تلقائيًا. 2. **تعلم العمليات الأساسية الأربعة:** كل لغة برمجة توفر طرقًا سهلة للتعامل مع المصفوفات. ركز على إتقان هذه العمليات الأربع أولاً: * **الإضافة (Add):** كيفية إضافة عنصر جديد في نهاية المصفوفة (مثل `push` في جافاسكريبت). * **الحذف (Remove):** كيفية حذف عنصر من النهاية (مثل `pop`) أو من مكان معين. * **التحديث (Update):** كيفية تغيير قيمة عنصر موجود باستخدام فهرسه (`myArray[2] = "New Value"`). * **القراءة (Read):** كيفية الوصول إلى عنصر باستخدام فهرسه (`let item = myArray[0]`). 3. **استخدم الحلقات (Loops) للمرور على العناصر:** قوة المصفوفات الحقيقية تظهر عندما تدمجها مع الحلقات (Loops) التي تعلمناها في الفصل التاسع. يمكنك تنفيذ عملية معينة على كل عنصر في القائمة بسطرين من الكود. ```javascript // مثال بسيط في جافاسكريبت let products = ["Laptop", "Mouse", "Keyboard"]; // المرور على كل منتج وطباعته for (let i = 0; i < products.length; i++) { console.log("Product found: " + products[i]); } ``` هذا النمط (حلقة `for` مع مصفوفة) هو أحد أكثر الأنماط شيوعًا في البرمجة على الإطلاق. أتقنه. 4. **لا تخف من "تفكيك" المصفوفة:** في اللغات الحديثة، يمكنك استخراج العناصر من مصفوفة إلى متغيرات فردية بسهولة، وهي تقنية تسمى "Destructuring". `let [first, second] = ["Apple", "Banana"];` هنا، `first` سيحتوي على "Apple" و `second` على "Banana". إنها طريقة أنيقة ونظيفة للتعامل مع البيانات. {: .story-content .page-4 .page-type-text .anim-fade-in dir="rtl"} --- ## الخلاصة: من القائمة إلى الكيان {: .story-heading .anim-slide-up} لقد أتقنت الآن أحد أهم المفاهيم في البرمجة. المصفوفات والمجموعات ليست مجرد ميزة في لغة البرمجة؛ إنها طريقة تفكير. إنها الطريقة التي يأخذ بها المبرمجون كميات هائلة من البيانات الفوضوية ويحولونها إلى قوائم منظمة وذات معنى. أنت الآن قادر على التعامل مع قوائم المهام، قوائم المستخدمين، قوائم المنتجات، وأي قائمة أخرى يمكنك تخيلها. لقد تجاوزت مرحلة التعامل مع البيانات كقطع فردية متناثرة، وبدأت في التعامل معها كمجموعات متكاملة. لكن ماذا لو كانت العناصر في قائمتك أكثر تعقيدًا؟ حتى الآن، كانت عناصرنا مجرد نصوص أو أرقام بسيطة. لكن في العالم الحقيقي، العنصر الواحد في القائمة قد يكون له خصائص متعددة. "المنتج" ليس مجرد اسم، بل له سعر، ووصف، وصورة، وتقييمات. "المستخدم" ليس مجرد اسم، بل له بريد إلكتروني، وكلمة مرور، وتاريخ ميلاد. كيف يمكننا تمثيل هذه الكيانات المعقدة التي تحتوي على بيانات متعددة خاصة بها؟ كيف نصنع "حاوية" داخل "الحاوية"؟ هذا ما سنجيب عليه في الفصل القادم، حيث ننتقل من القوائم البسيطة إلى الكيانات المركبة. **في الفصل القادم:** سنتعمق في **الفصل 12: الكائنات والفئات (Objects & Classes)**، حيث نتعلم كيف نصنع نماذجنا الرقمية الخاصة للعالم الحقيقي. {: .story-content .page-final .page-type-text .anim-fade-in dir="rtl"}
×

إعدادات القراءة

الوضع الليلي
حجم الخط 20px
نوع الخط
×

فهرس الكتاب