مكتبة Kotlin القياسية: نظرة شاملة
مكتبة Kotlin القياسية (stdlib) هي مجموعة أدوات قوية مدمجة مباشرة في اللغة. توفر كل ما هو ضروري للتطوير اليومي: من العمل مع المجموعات والسلاسل النصية إلى الكوروتينات والتسلسل. على عكس Java، تخلصك Kotlin من الكود النمطي، وتقدم بناء جملة موجزاً ومعبراً. في هذه النظرة الشاملة، سنشرح الوحدات الرئيسية في stdlib مع أمثلة عملية.
1. العمل مع المجموعات
تقدم المكتبة مجموعات غير قابلة للتغيير (List, Set, Map) وقابلة للتغيير (MutableList, MutableSet, MutableMap) مع مجموعة غنية من دوال الترتيب الأعلى.
val numbers = listOf(1, 2, 3, 4, 5)val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10]val even = numbers.filter { it % 2 == 0 } // [2, 4]val sum = numbers.reduce { acc, i -> acc + i } // 15الدوال الرئيسية:
map,filter,flatMap— التحويل والتصفيةgroupBy,partition— تجميع العناصرzip,unzip— دمج المجموعاتchunked,windowed— التقسيم إلى أجزاء
2. السلاسل النصية والتعبيرات المنتظمة
توسع Kotlin String بطرق غير موجودة في Java: إزالة البادئات/اللواحق، التحقق من الفراغ، القوالب.
val text = " Hello, Kotlin! "println(text.trim()) // "Hello, Kotlin!"println(text.removePrefix(" ")) // "Hello, Kotlin! "println(text.contains(Regex("Kotlin"))) // true
// سلاسل متعددة الأسطر مع trimIndentval json = """ { "name": "Kotlin", "year": 2016 }""".trimIndent()3. أمان القيم الخالية وعامل الإلفيس
إحدى الميزات الرئيسية لـ Kotlin هي الحماية المدمجة من NPE. توفر المكتبة القياسية دوال الاستدعاء الآمن (?.let) وعامل الإلفيس (?:).
val name: String? = getUserName()val length = name?.length ?: 0 // إذا كان name == null، فالقيمة 0name?.let { println("Name is $it") } // يتم التنفيذ فقط إذا كان name != null4. الكوروتينات (kotlinx.coroutines)
على الرغم من أن الكوروتينات هي مكتبة منفصلة رسمياً، إلا أنها تعتبر جزءاً من نظام Kotlin البيئي. تسمح بكتابة كود غير متزامن بطريقة متزامنة.
import kotlinx.coroutines.*
fun main() = runBlocking { launch { delay(1000L) println("World!") } println("Hello,")}المكونات الأساسية:
launch— تشغيل كوروتين بدون إرجاع قيمةasync— تشغيل مع إرجاعDeferredwithContext— تبديل السياق (مثلاً، إلى تيار واجهة المستخدم)- القنوات (
Channel) — لنقل البيانات بين الكوروتينات
5. التسلسل (kotlinx.serialization)
دعم مدمج لـ JSON و Protobuf و CBOR وتنسيقات أخرى من خلال التعليقات التوضيحية.
import kotlinx.serialization.*import kotlinx.serialization.json.*
@Serializabledata class User(val name: String, val age: Int)
fun main() { val user = User("Alice", 30) val json = Json.encodeToString(user) println(json) // {"name":"Alice","age":30} val decoded = Json.decodeFromString<User>(json) println(decoded) // User(name=Alice, age=30)}6. التدفقات والتسلسلات
للحسابات الكسولة، استخدم Sequence بدلاً من List — فهذا يوفر الذاكرة عند العمل مع البيانات الكبيرة.
val seq = generateSequence(1) { it + 1 } // تسلسل لا نهائي .take(10) .filter { it % 2 == 0 } .toList()println(seq) // [2, 4, 6, 8, 10]دوال الإ