Clikt: إطار عمل CLI قوي لـ Kotlin مع بناء جملة تصريحي

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

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

ابدأ الدورة

Clikt: إطار عمل CLI قوي لـ Kotlin



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



الميزات الرئيسية لـ Clikt



  • بناء جملة تصريحي: تعريف الأوامر والخيارات والوسائط من خلال DSL (لغة خاصة بالمجال) أو التعليقات التوضيحية.
  • توليد المساعدة تلقائيًا: يقوم Clikt تلقائيًا بإنشاء رسالة --help جميلة ومنظمة بناءً على تعريفاتك.
  • دعم الأوامر المتداخلة: إنشاء تسلسلات هرمية للأوامر (مثل git commit، git push) باستخدام آلية بسيطة للأوامر الفرعية.
  • التحقق من صحة القيم: آليات مدمجة للتحقق من الأنواع والنطاقات والتنسيقات والشروط المخصصة.
  • الإكمال التلقائي: دعم أصلي لتوليد نصوص الإكمال التلقائي لـ Bash و Zsh و Fish.
  • قابلية الاختبار: أدوات ملائمة لاختبار تطبيقات CLI دون تشغيل فعلي في المحطة الطرفية.


التثبيت والإعداد



للبدء، أضف التبعية إلى ملف build.gradle.kts الخاص بك:



repositories {    mavenCentral()}

dependencies { implementation("com.github.ajalt.clikt:clikt:4.4.0")}


لـ Maven استخدم:



<dependency>    <groupId>com.github.ajalt.clikt</groupId>    <artifactId>clikt</artifactId>    <version>4.4.0</version></dependency>


مثال أساسي: التحية



لنقم بإنشاء أمر بسيط يقبل اسم مستخدم وعلامة اختيارية للتحية بلغات مختلفة.



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.flagimport com.github.ajalt.clikt.parameters.options.option

class Greet : CliktCommand() { val name: String by argument(help = "اسم المستخدم") val formal: Boolean by option("--formal", "-f", help = "تحية رسمية").flag()

override fun run() { val greeting = if (formal) "مرحباً" else "أهلاً" echo("$greeting, $name!") }}

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


التشغيل من سطر الأوامر:



$ kotlin greet.kts إيفانأهلاً, إيفان!

$ kotlin greet.kts --formal إيفانمرحباً, إيفان!

$ kotlin greet.kts --helpUsage: greet [<options>] <name>

اسم المستخدم

Options: -f, --formal تحية رسمية -h, --help Show this message and exit


مثال متقدم: العمل مع الملفات والأوامر الفرعية



لننظر في سيناريو أكثر تعقيدًا — أداة للعمل مع الملفات النصية تدعم الأوامر الفرعية count و search.



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.core.subcommandsimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.defaultimport com.github.ajalt.clikt.parameters.options.optionimport java.io.File

class FileTool : CliktCommand() { override fun run() = Unit // الأمر الجذر لا يفعل شيئًا}

class Count : CliktCommand(help = "عد الأسطر في الملف") { val file: File by argument(help = "مسار الملف") .validate { require(it.exists()) { "الملف غير موجود: $it" } }

override f

توصيات