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 أيضاً في المكتبة
عميل OAuth لـ Kotlin: التكامل مع المزودين عبر ktor-client و kotlinx-serialization
قوائم المهام في Swift: GCD وOperationQueue وSwift Concurrency
مجدول المهام بلغة C++: TaskFlow، CronCpp، Boost.Asio
العمل مع Markdown في C++: المكتبات، المحللات والأدوات
العمل مع أرشيفات ZIP في C++: المكتبات وأمثلة الكود