مكتبة Kotlin القياسية: نظرة شاملة
مكتبة Kotlin القياسية (stdlib) هي مجموعة أدوات قوية تأتي مع المترجم وتوفر الوظائف الأساسية للتطوير اليومي. على عكس Java، حيث تتطلب العديد من العمليات مكتبات خارجية، تقدم Kotlin حلولاً مدمجة للتعامل مع المجموعات والسلاسل النصية والكوروتينات والتسلسل والإدخال/الإخراج للملفات. في هذه المقالة، سنقوم بتحليل الوحدات والوظائف الرئيسية لمكتبة Kotlin القياسية مع أمثلة عملية.
1. الأنواع الأساسية وإمكانياتها
تتضمن المكتبة وظائف موسعة للأنواع البدائية والسلاسل النصية:
- الأنواع الرقمية —
Int،Double،Longوامتداداتها (.toInt()،.coerceIn()). - السلاسل النصية — القوالب (
"Hello, $name")، السلاسل متعددة الأسطر ("""...""")، الطرقreplace()،split()،trimIndent(). - النطاقات —
1..10،step 2،downTo.
// مثال على التعامل مع السلاسل النصية والنطاقاتfun main() { val name = "Kotlin" val greeting = "Hello, $name!" println(greeting) // Hello, Kotlin!
for (i in 1..5 step 2) { println(i) // 1, 3, 5 }}2. المجموعات: List، Set، Map
تقسم Kotlin المجموعات إلى قابلة للتغيير (MutableList، MutableSet، MutableMap) وغير قابلة للتغيير (List، Set، Map). الإمكانيات الرئيسية:
- الإنشاء —
listOf()،setOf()،mapOf(). - التصفية والتحويل —
filter()،map()،flatMap()،groupBy(). - التجميع —
sum()،count()،reduce()،fold(). - الترتيب —
sorted()،sortedBy().
// مثال على التعامل مع المجموعاتfun main() { val numbers = listOf(1, 2, 3, 4, 5) val evenSquares = numbers .filter { it % 2 == 0 } .map { it * it } println(evenSquares) // [4, 16]
val grouped = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } println(grouped) // {odd=[1, 3, 5], even=[2, 4]}}3. المتتاليات (Sequences)
للحسابات الكسولة، تقدم Kotlin Sequence. هذا مفيد بشكل خاص عند التعامل مع كميات كبيرة من البيانات:
fun main() { val result = (1..1_000_000) .asSequence() .filter { it % 2 == 0 } .map { it * 2 } .take(5) .toList() println(result) // [4, 8, 12, 16, 20]}4. أمان القيم الخالية وعامل الإلفيس
إحدى الميزات الرئيسية لـ Kotlin هي التعامل الآمن مع القيم الخالية. توفر المكتبة:
- عامل الإلفيس (
?:) — يحدد قيمة افتراضية. - الاستدعاء الآمن (
?.) — يمنع NullPointerException. - دالة let — تنفذ الكود فقط إذا لم يكن الكائن فارغاً.
fun main() { val name: String? = null val length = name?.length ?: 0 println(length) // 0
name?.let { println("Name is not null: $it") }}5. التعامل مع الملفات والتدفقات
تتضمن المكتبة القياسية امتدادات مريحة لـ java.io.File:
readText()،writeText()— قراءة/كتابة السلاسل النصية.readLines()— القراءة سطراً بسطر.useLines()— التعامل الآمن مع التدفقات.copyTo()،