تعلّم البرمجة بلغة كوتلن (29): التجميعات Collections

تعلّم البرمجة بلغة كوتلن (29): التجميعات Collections
أستمع الى المقال

في الدروس السابقة، تعلمنا كيفية الإعلان عن المتغيرات لتخزين قيمة واحدة من البيانات بها، ثم إجراء العمليات عليها. مثل أن نخزّن عدد صحيح Int، أو كسري Double، أو جملة واحدة مكونة من سلسلة من المحارف String، وغيرها من أنواع البيانات والتي شرحناها في درسي: المتغيرات والقيم، وأنواع البيانات.

ولكن ماذا نفعل إذا أردنا حفظ ومعالجة ليس قيمة واحدة فقط، ولكن قيم بيانات متعددة من نفس النوع؟ مثل: حفظ أكثر من عدد صحيح Int، أو أكثر من جملة نصية واحدة String، في متغير واحد فقط؟ 

في هذه الحالة، يمكننا استخدام التجميعات Collections، والتي تتيح لنا معالجة قيم متعددة من نفس النوع كوِحدة واحدة.

ما هي التجميعات Collections:

التجميعات هي عبارة عن حاويات Containers تحتوي عادةً على عدد من الكائنات من نفس نوع البيانات. تسمى هذه الكائنات التي تحتويها التجميعة، عناصر Elements.

وتعتبر التجميعات، تنفيذ عملي لهياكل البيانات المجردة Abstract Data Structure، والتي يمكن إجراء العمليات التالية عليها:

  • استرجاع أو قراءة عنصر.
  •  إزالة عنصر.
  •  تغيير أو استبدال عنصر.
  •  إضافة عنصر جديد.

مع ملاحظة، أن عمليات مثل إضافة العناصر وإزالتها وتغييرها، تنطبق فقط على التجميعات القابلة للتغيير Mutable Collections.  ماذا يعني هذا؟

هذا يعني، تماماً مثل ما نفعل عند الإعلان عن المتغيرات الغير قابلة للتغير Immutable باستخدام الكلمة val، والمتغيرات القابلة للتغيير Mutable باستخدام الكلمة المفتاحية var. يمكننا فعل ذلك عند إنشاء تجميعات في كوتلن، بالاختيار أن نعلن عن تجميعات غير قابلة للتغيير Immutable Collections، أو تجميعات قابلة للتغيير Mutable Collections.

تجميعات غير قابلة للتغيير Immutable Collections:

عند الإعلان عن هذا النوع من التجميعات، يمكننا فقط الوصول إلى عناصره وقراءة قيمها، ولكن لا يمكن إجراء عمليات تغيير عليها. 

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

تجميعات قابلة للتغيير Mutable Collections:

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

يمكننا استخدام هذا النوع من التجميعات، عندما نريد تخزين مجموعة من العناصر التي سنحتاج لاحقاً إلى تعديلها. 

أنواع التجميعات في كوتلن:

تقدم كوتلن في مكتبتها القياسية، ثلاثة أنواع من التجميعات:

  • القوائم Lists: يمكن تخزين العناصر بترتيب محدد. ويتم الوصول إلى العنصر عبر استخدام الفهرس Index. ويمكن أن تتكرر العناصر في هذه التجميعة.
  • الأطقم Sets: يتم تخزين العناصر بدون ترتيب محدد. ولكن يجب أن تكون العناصر فريدة، ولا يسمح بتكرارها في التجميعة.
  • الخرائط Maps: يتم تخزين العناصر، كأزواج Pairs. كل قيمة value، تقترن بمفتاح key يمثل الفهرس الذي نستخدمه للوصول للقيمة. يجب أن تكون المفاتيح فريدة، ولكن يسمح بتكرار القيم في التجميعة.

كل الأنواع الثلاث، تتوفر في شكل قابل للتغيير Mutable، أو غير قابل للتغيير Immutable، في مكتبة كوتلن القياسية. سنشرح هذه الأنواع نظرياً وعملياً، في الدروس الثلاث القادمة بواقع درس لكل نوع.

الخاصيات والدوال المشتركة بين أنواع التجميعات:

كما رأينا في الفقرة أعلاه، تختلف التجميعات الثلاث في الهيكل والتطبيق. ومع ذلك، توفر كوتلن خاصيات ودوال مشتركة، يمكن استخدامها مع أي تجميعة. بالرغم من أننا سنستعرضها في الدروس الخاصة بكل نوع تجميعة، لكن قبل ذلك، دعونا نلقي نظرة سريعة عليها:

  •  size: خاصية تعيد حجم (عدد العناصر) في التجميعة.
  • (contains(element: دالة تستقبل معامل من نوع بيانات معين، ثم تعيد نتيجة ما إذا كان المعامل متوفراً كعنصر في التجميعة أم لا.
  • (containsAll(elements: دالة تستقبل تجميعة أخرى كمعامل، وتعيد نتيجة ما إذا كانت كل عناصر التجميعة المراد البحث عنها، متوفرة في التجميعة التي تم استخدام الدالة عليها.
  • ()isEmpty: دالة تعيد نتيجة ما إذا كانت التجميعة فارغة (لا تحتوي على عناصر) أم لا.
  • ()joinToString: دالة تحول التجميعة إلى النوع String.
  • (IndexOf(element: دالة تستقبل معامل من نوع بيانات معين، ثم تبحث عنه في التجميعة. إذا كان المعامل متوفراً كعنصر في التجميعة، تعيد الفهرس Index الذي يمثله. أما إذا لم يكن متوفراً، تعيد -1.

بالإضافة إلى ذلك، هناك بعض الدوال التي يمكن استخدامها مع التجميعات القابلة للتغيير، لكن لا يمكن استخدامها مع التجميعات الغير قابلة للتغيير:

  • ()clear: حذف كل عناصر التجميعة.
  • (remove(element: حذف العنصر المرسل بين قوسي الدالة من التجميعة.
  • (removeAll(elements: حذف كل العناصر المرسلة بين قوسي الدالة من التجميعة.

استخدام الكلمة المفتاحية in:

بالإضافة إلى دالة ()contains، يمكننا استخدام الكلمة in للبحث عن عنصر في تجميعة معينة، أو للدوران على كل عناصر التجميعة عبر حلقة التكرار for. تماماً مثل ما فعلنا النطاقات. كالتالي:

استخدام الدالة:

collection.contains(element)

استخدام الكلمة المفتاحية in:

element in collection

كما يتضح من المثال، أن استخدام in أوضح وأكثر قابلية للقراءة. لذا تنصح وثائق كوتلن الرسمية، باستخدامها بدلاً عن ()contains.

كانت هذه مقدمة عامة عن التجميعات في كوتلن. في الدروس الثلاث القادمة، سنشرح الأنواع الثلاث تفصيلياً. بدءاً من الدرس القادم والذي سنتحدث فيه عن القوائم Lists.

هذا الدرس هو جزء من سلسلة تعليم مبادئ البرمجة بلغة كوتلن. لمُتابعة الدروس منذ البداية ومُشاهدة فهرس المحتويات يمكنك الانتقال إلى الدرس الأول من هنا.

هل أعجبك المحتوى وتريد المزيد منه يصل إلى صندوق بريدك الإلكتروني بشكلٍ دوري؟
انضم إلى قائمة من يقدّرون محتوى إكسڤار واشترك بنشرتنا البريدية.