الأتمتة باستخدام Kotlin: لماذا تستحق اهتمامك
هل سبق لك أن أمضيت ساعة في إعادة تسمية مئات الملفات، أو تحليل السجلات يدويًا، أو نسخ البيانات من API إلى آخر؟ ألم مألوف. عادةً، نلجأ إلى Python أو Bash لمثل هذه المهام، لكن Kotlin أداة قوية وأنيقة بشكل غير متوقع لـ الأتمتة باستخدام Kotlin. فهو يجمع بين إيجاز اللغة الحديثة وأداء JVM والوصول الكامل إلى نظام Java البيئي.
في هذه المقالة، لن نكتب "Hello, World" آخر. سننتقل مباشرة إلى صلب الموضوع: سنشرح أمثلة كود Kotlin التي ستكون مفيدة حقًا في العمل اليومي للمطور، مسؤول النظام، أو المختبر. ستتعلم كيفية كتابة نصوص Kotlin البرمجية للعمل مع الملفات، إرسال طلبات HTTP، تحليل البيانات، وتشغيل أوامر النظام. هيا بنا!
لماذا Kotlin بدلاً من Python أو Bash؟
لكل لغة مجالها الخاص. Bash مثالي للأوامر السريعة المكونة من سطر واحد، وPython للمنطق المعقد وعلوم البيانات. لكن Kotlin للأتمتة يوفر العديد من المزايا الفريدة:
- أمان الأنواع. لن تحصل على خطأ "string vs int" في وقت التشغيل - سيكتشفه المترجم في البداية.
- توافق كامل مع Java. أي مكتبة Java (Apache POI, OkHttp, Jackson) متاحة فورًا.
- نصوص Kotlin (.kts). يمكنك كتابة نصوص برمجية بدون تجميع - قم بتشغيلها كملف .sh عادي.
- بناء جملة موجز. كود نمطي أقل، قابلية قراءة أكبر.
إعداد البيئة لنصوص Kotlin البرمجية
لتشغيل نصوص Kotlin البرمجية، لا تحتاج إلى تثبيت Android Studio. يكفي:
- تثبيت مترجم Kotlin (أو SDKMAN).
- إنشاء ملف بامتداد
.kts. - تشغيله بالأمر:
kotlinc -script script.kts
تم. الآن لنكتب أول نص برمجي مفيد حقًا.
مثال 1: إعادة تسمية جماعية للملفات
تخيل: لديك مجلد به صور IMG_001.jpg, IMG_002.jpg ... IMG_100.jpg. تحتاج إلى إعادة تسميتها إلى holiday_01.jpg, holiday_02.jpg .... يدويًا - 10 دقائق. بنص برمجي - ثانيتان.
import java.io.File
fun main() { val folder = File("/path/to/photos") val files = folder.listFiles()?.filter { it.extension == "jpg" } ?: return
files.sorted().forEachIndexed { index, file -> val newName = "holiday_${index.toString().padStart(2, '0')}.jpg" val newFile = File(folder, newName) file.renameTo(newFile) println("Renamed: ${file.name} -> $newName") }}
// التشغيل: kotlinc -script rename.ktsهذا مثال كود Kotlin يقوم بثلاثة أشياء: تصفية ملفات JPG فقط، ترتيبها حسب الاسم (للحفاظ على الترتيب)، وإعادة تسميتها مع الترقيم. لاحظ padStart - ميزة أنيقة في Kotlin لتنسيق الأرقام.
مثال 2: طلب HTTP وتحليل JSON
غالبًا ما تحتاج إلى أتمتة جمع البيانات من واجهات برمجة التطبيقات (API) على الويب. لنفترض أننا نحصل على قائمة مستخدمين ونحفظها في CSV. في Kotlin للأتمتة، يتم ذلك في بضعة أسطر باستخدام مكتبة ktor-client (أو java.net.HttpURLConnection القديم الجيد).
ولكن بالنسبة للنص البرمجي، من الأسهل تضمين مكتبة خارجية عبر @file:DependsOn:
@file:DependsOn("com.google.code.gson:gson:2.10.1")@file:DependsOn("io.ktor:ktor-client-core:2.3.7")@file:DependsOn("io.ktor:ktor-client-java:2.3.7")
import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import com.google.gson.Gsonimport com.google.gson.reflect.TypeTokenimport java.io.File\