أطر CLI للغة Kotlin: Clikt، kotlinx-cli، picocli — نظرة عامة ومقارنة

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

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

ابدأ الدورة

أطر CLI للغة Kotlin: إنشاء تطبيقات وحدة تحكم قوية



Kotlin هي لغة حديثة مناسبة تمامًا ليس فقط لتطوير Android أو الخادم، ولكن أيضًا لإنشاء تطبيقات وحدة التحكم (CLI). لتجنب كتابة تحليل الوسائط يدويًا، توجد أطر عمل متخصصة. في هذه المقالة، سنستعرض ثلاثة من أشهر الحلول: Clikt و kotlinx-cli و picocli. ستتعرف على ميزاتها، وترى أمثلة على الكود، وستتمكن من اختيار الأداة المناسبة لمشروعك.



لماذا نحتاج إلى إطار عمل CLI؟

إنشاء أدوات سطر الأوامر هي مهمة تزداد تعقيدًا بسرعة: تحتاج إلى معالجة العلامات (flags)، والخيارات (options)، والوسائط الموضعية (positional arguments)، وعرض المساعدة. يؤدي التنفيذ اليدوي إلى أخطاء وتكرار في الكود. تقدم الأطر آليات جاهزة:

  • وصف تصريحي لواجهة الأوامر
  • توليد تلقائي للمساعدة (--help)
  • التحقق من صحة الإدخال (Validation)
  • دعم الأوامر الفرعية (نمط git)
  • أمان الأنواع (Type safety)


1. Clikt — الإطار الأكثر "Kotlin-أصالة"

Clikt (https://github.com/ajalt/clikt) هي مكتبة Kotlin نقية تستخدم DSL والخصائص المفوضة (delegated properties). لا تعتمد على تعليقات Java التوضيحية وتقدم واجهة برمجة تطبيقات بديهية.



التثبيت

// build.gradle.ktsimplementation("com.github.ajalt.clikt:clikt:4.2.2")


مثال: آلة حاسبة بسيطة

import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.optionimport com.github.ajalt.clikt.parameters.types.int

class Calc : CliktCommand() { val a: Int by argument() val b: Int by argument() val multiply by option("--mult", "-m", help = "الضرب بدلاً من الجمع").flag()

override fun run() { val result = if (multiply) a * b else a + b echo("النتيجة: $result") }}

fun main(args: Array<String>) = Calc().main(args)


التشغيل: kotlin calc 5 3 --mult → النتيجة: 15.



مزايا Clikt:

  • تكامل كامل مع Kotlin (DSL، مفوضات)
  • نظام تحقق قوي (custom validators)
  • دعم الأوامر الفرعية لأي عمق
  • توليد تلقائي لصفحات man
  • مجتمع نشط وتحديثات مستمرة


2. kotlinx-cli — حل خفيف من JetBrains

kotlinx-cli هي مكتبة تجريبية، جزء من نظام Kotlin البيئي. إنها بسيطة ومناسبة للأدوات المساعدة الصغيرة.



التثبيت

// build.gradle.ktsimplementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")


مثال: تحية

import kotlinx.cli.*

fun main(args: Array<String>) { val parser = ArgParser("greet") val name by parser.option(ArgType.String, shortName = "n", description = "الاسم") .default("عالم") val times by parser.option(ArgType.Int, shortName = "t", description = "عدد المرات") .default(1)

parser.parse(args)

repeat(times) { println("مرحبًا، $name!") }}


التشغيل: kotlin greet -n كوتلن -t 2 → مرحبًا، كوتلن! (مرتين).



ميزات kotlinx-cli:

  • واجهة برمجة تطبيقات بسيطة جدًا — أقل كود
  • دعم الأنواع الأساسية (String, Int, Boolean)
  • غير مناسب للتسلسلات الهرمية المعقدة للأوامر
  • حالة تجريبية (قد تتغير واجهة API)
  • لا يوجد تحقق مدمج أو اقتراحات


3. picocli — إطار عمل قوي بجذور Java

picocli هو إطار عمل شائع يعمل مع كل من Java و Kotlin. يستخدم التعليقات التوضيحية (annotations)، ولكن لديه دعم خاص لـ Kotlin DSL.

توصيات