استكشاف معمّق للمجموعات غير القابلة للتغيير
استكشف المجموعات الأساسية غير القابلة للتغيير مثل List وMap وSet، وتعلّم استخدامها بكفاءة
استكشاف معمّق للمجموعات غير القابلة للتغيير درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 3 دروس في المجموع.
المجموعات غير القابلة للتغيير: نظرة عامة
مرحبًا بكم في عالم المجموعات غير القابلة للتغيير! تُعدّ هذه المجموعات في Scala أساسًا لكتابة شيفرة متينة ومتزامنة وقابلة للتوقّع، لا سيما في البرمجة الوظيفية.
سنستكشف الأنواع الأساسية مثل List وMap وSet، مع التركيز على استخدامها بكفاءة وأمان.
لماذا تهمّ عدم القابلية للتغيير
تعني عدم القابلية للتغيير أنه لا يمكن تغيير المجموعة بعد إنشائها. فأي عملية تبدو وكأنها «تعدّلها» تُرجع فعليًا مجموعة جديدة.
- قابلية التوقّع: تسهّل فهم سلوك الشيفرة.
- أمان الخيوط: لا حاجة إلى أقفال، لأن البيانات لا تتغيّر.
- غياب الآثار الجانبية: لن تغيّر العمليات البيانات في موضع آخر على نحو غير متوقّع.
قوائم Scala: تسلسلات مرتّبة
إن List في Scala عبارة عن تسلسل غير قابل للتغيير ومرتّب من العناصر ذات النوع نفسه. وهي مثالية للبيانات المتسلسلة التي يهمّ ترتيبها.
يمكنكم إنشاء قائمة بمجرد تعداد عناصرها.
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4, 5)
val fruits = List("apple", "banana", "cherry")
println(s"Numbers list: $numbers")
println(s"Fruits list: $fruits")
}
}عمليات القوائم: الرأس والذيل وCons
توفّر القوائم عمليات شائعة، مثل الحصول على head (العنصر الأول) وtail (بقية القائمة). ويُستخدم العامل :: (cons) لإضافة عنصر في البداية، وإنشاء قائمة جديدة.
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(10, 20, 30)
println(s"Original list: $numbers")
println(s"Head of list: ${numbers.head}") // 10
println(s"Tail of list: ${numbers.tail}") // List(20, 30)
val newList = 5 :: numbers // Prepend 5
println(s"List with 5 prepended: $newList")
}
}خرائط Scala: ارتباطات المفتاح والقيمة
إن Map مجموعة غير قابلة للتغيير تخزّن أزواجًا من المفتاح والقيمة. ويكون كل مفتاح فريدًا ويرتبط بقيمة واحدة. وتُعدّ الخرائط ممتازة للبحث عن القيم باستخدام مفتاح محدّد.
object Main {
def main(args: Array[String]): Unit = {
val ages = Map("Alice" -> 30, "Bob" -> 25, "Charlie" -> 35)
val codes = Map(1 -> "One", 2 -> "Two")
println(s"Ages map: $ages")
println(s"Codes map: $codes")
}
}عمليات الخرائط: الوصول والتحديث
يمكنكم الوصول إلى القيم في Map باستخدام مفتاحها. ولـ«تحديث» زوج مفتاح-قيمة أو إضافته، تنشئون خريطة جديدة تتضمن التغييرات، مع إبقاء الخريطة الأصلية دون تغيير.
object Main {
def main(args: Array[String]): Unit = {
val ages = Map("Alice" -> 30, "Bob" -> 25)
println(s"Original ages: $ages")
println(s"Bob's age: ${ages("Bob")}")
val updatedAges = ages + ("Charlie" -> 35) // Add new pair
println(s"Ages after adding Charlie: $updatedAges")
val changedAges = updatedAges + ("Alice" -> 31) // Update Alice's age
println(s"Ages after updating Alice: $changedAges")
}
}مجموعات Scala: عناصر فريدة
إن Set مجموعة غير قابلة للتغيير من العناصر الفريدة. وعلى خلاف القوائم، لا يُضمن ترتيب العناصر في المجموعة، كما يتم تجاهل العناصر المكرّرة تلقائيًا.
تُعدّ المجموعات مثالية للتحقق من العضوية أو ضمان التفرد.
object Main {
def main(args: Array[String]): Unit = {
val numbers = Set(1, 2, 2, 3, 4, 3, 5)
val letters = Set('a', 'b', 'a')
println(s"Unique numbers: $numbers")
println(s"Unique letters: $letters")
}
}عمليات المجموعات: الإضافة والإزالة والاتحاد
على غرار القوائم والخرائط، تُرجع العمليات على المجموعات، مثل إضافة العناصر أو إزالتها، مجموعة جديدة أيضًا. ويمكنكم كذلك إجراء عمليات من نظرية المجموعات، مثل union (دمج المجموعات).
object Main {
def main(args: Array[String]): Unit = {
val setA = Set(1, 2, 3)
val setB = Set(3, 4, 5)
println(s"Set A: $setA")
println(s"Set B: $setB")
val addedSet = setA + 4 // Add element
println(s"Set A + 4: $addedSet")
val removedSet = setA - 2 // Remove element
println(s"Set A - 2: $removedSet")
val unionSet = setA union setB // Combine sets
println(s"Set A union Set B: $unionSet")
}
}عدم القابلية للتغيير: بقاء الأصل
من المهم تذكّر أن جميع عمليات «التعديل» على مجموعات Scala غير القابلة للتغيير تُرجع مجموعة جديدة. ولا تتغيّر المجموعة الأصلية مطلقًا.
يُعدّ هذا السلوك ركيزة أساسية في البرمجة الوظيفية باستخدام Scala.
object Main {
def main(args: Array[String]): Unit = {
val originalList = List(10, 20, 30)
println(s"Original List: $originalList")
val doubledList = originalList.map(_ * 2) // map returns a NEW list
println(s"List after map: $doubledList")
println(s"Original list is still: $originalList") // Unchanged!
}
}تحقّقوا من فهمكم
تأمّلوا مقطع شيفرة Scala التالي:
val mySet = Set(1, 2, 3)
val newSet = mySet + 3 + 4
val finalSet = newSet - 2ما قيمة mySet بعد تنفيذ هذه العمليات؟
مراجعة: المجموعات غير القابلة للتغيير
تعمّقتم في استكشاف المجموعات الأساسية غير القابلة للتغيير في Scala:
- القوائم: تسلسلات مرتّبة، مناسبة للبيانات المتسلسلة.
- الخرائط: أزواج من المفاتيح والقيم، فعّالة في عمليات البحث.
- المجموعات: عناصر فريدة، ممتازة للتحقق من العضوية.
الخلاصة الأساسية هي عدم القابلية للتغيير: إذ تُرجع العمليات دائمًا مجموعات جديدة، مما يضمن قابلية التوقّع والأمان.
الأسئلة الشائعة
هل درس «استكشاف معمّق للمجموعات غير القابلة للتغيير» مجاني؟
نعم — نص درس «استكشاف معمّق للمجموعات غير القابلة للتغيير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 3 دروس في المجموع.
ماذا ستتعلم في «استكشاف معمّق للمجموعات غير القابلة للتغيير»؟
استكشف المجموعات الأساسية غير القابلة للتغيير مثل List وMap وSet، وتعلّم استخدامها بكفاءة تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟
لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «استكشاف معمّق للمجموعات غير القابلة للتغيير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟
نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استكشاف معمّق للمجموعات غير القابلة للتغيير
- العمليات الوظيفية على المجموعات
- Option وTry وEither لمعالجة الأخطاء