أدوات CLI بلغة Kotlin: نكتب من الصفر في وحدة التحكم

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا تعتبر 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
\n\n

إذا لم تكن قد عملت مع Kotlin في وحدة التحكم من قبل - فلا بأس. سنقطع شوطًا من ملف فارغ إلى أداة كاملة يمكن نشرها واستخدامها في خطوط أنابيب CI/CD.

\n\n

الخطوة 1: إعداد المشروع لأداة CLI

\n\n

لنقم بإنشاء مشروع Gradle بسيط. إليك ملف build.gradle.kts الأدنى:

\n\n
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:

\n\n
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\n
import com.github.ajalt.clikt.core.subcommands\n\nclass FileTool : CliktCommand(\n    name                

المدونات

توصيات الكتب