لماذا تعتبر Kotlin لغة مثالية لأدوات CLI؟
\n\nعندما يتعلق الأمر بإنشاء أدوات وحدة التحكم، يلجأ العديد من المطورين بدافع العادة إلى Python أو Bash. ولكن إذا كنت على دراية بالفعل بـ Kotlin (وفي موقعنا pythonlib.ru نحن على يقين من أن المطور الجيد يتقن عدة لغات)، فأنت تعلم مدى إيجاز هذه اللغة وتعبيرها. إن إنشاء أدوات CLI بلغة Kotlin ليس مجرد اتباع للموضة، بل هو وسيلة حقيقية للحصول على أدوات سريعة وآمنة من حيث الأنواع ومتعددة المنصات.
\n\nتخيل: أنت تكتب تطبيق وحدة تحكم بلغة Kotlin يتم تجميعه إلى JAR أو ملف ثنائي أصلي عبر GraalVM أو Kotlin/Native. يعمل في أي مكان - من خادم Linux إلى جهاز Windows الخاص بزميلك. وفي الوقت نفسه، يكون الكود أقصر بمقدار 2-3 مرات من Java، وأكثر أمانًا بكثير من Python. يبدو الأمر مغريًا؟ دعنا نتعمق في الأمر.
\n\nما الذي تحتاجه للبدء؟
\n\nلإنشاء Kotlin CLI ستحتاج إلى الحد الأدنى التالي:
\n- \n
- JDK 11+ مثبت (أوصي بالإصدار 17 أو 21) \n
- IntelliJ IDEA (إصدار Community كافٍ) أو أي محرر نصوص \n
- معرفة أساسية بـ Kotlin (الدوال، الكلاسات، المجموعات) \n
- Gradle أو Maven للبناء \n
إذا لم تكن قد عملت مع Kotlin في وحدة التحكم من قبل - فلا بأس. سنقطع شوطًا من ملف فارغ إلى أداة كاملة يمكن نشرها واستخدامها في خطوط أنابيب CI/CD.
\n\nالخطوة 1: إعداد المشروع لأداة CLI
\n\nلنقم بإنشاء مشروع Gradle بسيط. إليك ملف build.gradle.kts الأدنى:
plugins {\n kotlin("jvm") version "1.9.22"\n application\n}\n\napplication {\n mainClass.set("com.pythonlib.cli.MainKt")\n}\n\nrepositories {\n mavenCentral()\n}\n\ndependencies {\n implementation("com.github.ajalt.clikt:clikt:4.2.2")\n implementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")\n}\n\nلاحظ المكتبتين الرئيسيتين: Clikt و Kotlinx CLI. الأولى هي المكتبة الأكثر شيوعًا لإنشاء أدوات CLI بلغة Kotlin. الثانية هي الحل الرسمي من JetBrains. في هذه المقالة، سنستخدم Clikt لأنها توفر مرونة أكبر وتبدو أفضل.
\n\nالخطوة 2: كتابة الأمر الأول
\n\nلنقم بإنشاء ملف src/main/kotlin/com/pythonlib/cli/Main.kt:
package com.pythonlib.cli\n\nimport com.github.ajalt.clikt.core.CliktCommand\nimport com.github.ajalt.clikt.parameters.arguments.argument\nimport com.github.ajalt.clikt.parameters.options.option\nimport com.github.ajalt.clikt.parameters.options.flag\n\nclass GreetCommand : CliktCommand(\n name = "greet",\n help = "يرحب بالمستخدم"\n) {\n private val name: String by argument(\n help = "اسم المستخدم"\n )\n\n private val uppercase: Boolean by option(\n "--uppercase", "-u",\n help = "عرض الاسم بأحرف كبيرة"\n ).flag()\n\n override fun run() {\n val greeting = "مرحبًا، $name!"\n if (uppercase) {\n echo(greeting.uppercase())\n } else {\n echo(greeting)\n }\n }\n}\n\nfun main(args: Array<String>) {\n GreetCommand().main(args)\n}\n\nهذه أداة Kotlin CLI بسيطة تأخذ اسمًا وعلمًا اختياريًا. لنشغلها:
\n\n./gradlew run --args="أليكسي --uppercase"\n# الإخراج: مرحبًا، أليكسي!\n\nفقط 30 سطرًا من الكود - ولدينا أداة وحدة تحكم عاملة. Clikt يقوم بتوليد المساعدة ومعالجة الأخطاء ودعم الإكمال التلقائي لـ bash/zsh.
\n\nالخطوة 3: الأوامر متعددة المستويات (مثل Git)
\n\nنادرًا ما تتكون تطبيقات وحدة التحكم بلغة Kotlin الحقيقية من أمر واحد. دعنا نصنع أداة للعمل مع الملفات تدعم الأوامر الفرعية:
\n\nimport com.github.ajalt.clikt.core.subcommands\n\nclass FileTool : CliktCommand(\n name