Kotlin के लिए CLI फ्रेमवर्क: शक्तिशाली कंसोल एप्लिकेशन बनाना
\n\nKotlin एक आधुनिक भाषा है जिसका उपयोग न केवल Android डेवलपमेंट के लिए, बल्कि सर्वर और कंसोल एप्लिकेशन बनाने के लिए भी सक्रिय रूप से किया जाता है। Kotlin पर CLI (Command Line Interface) टूल का विकास विशेष फ्रेमवर्क की मदद से काफी सरल किया जा सकता है। इस लेख में, हम तीन सबसे लोकप्रिय समाधानों पर विचार करेंगे: Clikt, Kotlinx-cli और Aigrette, और व्यावहारिक उदाहरणों के साथ उनका विश्लेषण करेंगे।
\n\nCLI फ्रेमवर्क की आवश्यकता क्यों है?
\n\nमैन्युअल रूप से कमांड लाइन आर्गुमेंट पार्सर लिखना एक थकाऊ और त्रुटि-प्रवण कार्य है। CLI के लिए फ्रेमवर्क प्रदान करते हैं:
\n\n- \n
- आर्गुमेंट और विकल्पों का स्वचालित पार्सिंग \n
- सहायता (
--help) का निर्माण \n - इनपुट डेटा का सत्यापन \n
- उप-कमांड (subcommands) के लिए समर्थन \n
- स्पष्ट संदेशों के साथ त्रुटि प्रबंधन \n
Clikt — सबसे लोकप्रिय विकल्प
\n\nClikt एक शक्तिशाली और लचीली लाइब्रेरी है जो Kotlin पर CLI के लिए डी-फैक्टो मानक बन गई है। यह एनोटेशन के साथ घोषणात्मक दृष्टिकोण का उपयोग करती है और एक समृद्ध API प्रदान करती है।
\n\nस्थापना (Gradle के माध्यम से):
\n\nimplementation("com.github.ajalt.clikt:clikt:4.2.1")\n\nसरल एप्लिकेशन का उदाहरण:
\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.types.int\n\nclass Greet : CliktCommand() {\n val name by argument()\n val count by option("--count", "-c", help = "दोहराव की संख्या").int().default(1)\n\n override fun run() {\n repeat(count) {\n echo("नमस्ते, $name!")\n }\n }\n}\n\nfun main(args: Array<String>) = Greet().main(args)\n\nचलाना:
\n\n./app --count 3 इवान\n# आउटपुट:\n# नमस्ते, इवान!\n# नमस्ते, इवान!\n# नमस्ते, इवान!\n\nClikt नेस्टेड कमांड, ऑटो-कम्प्लीशन, कंसोल में रंग और सख्त टाइपिंग का समर्थन करता है। जटिल प्रोजेक्ट्स (जैसे DevOps टूल, API के साथ काम करने के लिए उपयोगिताएँ) के लिए यह सबसे अच्छा विकल्प है।
\n\nKotlinx-cli — JetBrains का हल्का समाधान
\n\nKotlinx-cli Kotlin के निर्माताओं की आधिकारिक लाइब्रेरी है। यह Clikt की तुलना में कम कार्यात्मक है, लेकिन सरल उपयोगिताओं और छोटे प्रोजेक्ट्स के लिए एकदम सही है।
\n\nस्थापना:
\n\nimplementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")\n\nउदाहरण:
\n\nimport kotlinx.cli.*\n\nfun main(args: Array<String>) {\n val parser = ArgParser("file-util")\n val input by parser.argument(ArgType.String, description = "इनपुट फ़ाइल")\n val output by parser.option(ArgType.String, shortName = "o", description = "आउटपुट फ़ाइल").default("out.txt")\n val verbose by parser.option(ArgType.Boolean, shortName = "v", description = "विस्तृत आउटपुट").default(false)\n\n parser.parse(args)\n\n println("से पढ़ रहे हैं: $input")\n println("में लिख रहे हैं: $output")\n if (verbose) println("विस्तृत मोड चालू है")\n}\n\nKotlinx-cli को अतिरिक्त निर्भरताओं की आवश्यकता नहीं है और यह तेज़ प्रोटोटाइपिंग के लिए उपयुक्त है। हालाँकि, यह नेस्टेड कमांड और जटिल सत्यापन का समर्थन नहीं करता है।
\n\nAigrette — कार्यात्मक दृष्टिकोण
\n\nAigrette एक कम ज्ञात लेकिन दिलचस्प लाइब्रेरी है जो कार्यात्मक शैली का उपयोग करती है। यह "पार्सर कॉम्बिनेटर" की अवधारणा पर आधारित है।
\n\nस्थापना:
\n\nimplementation("io.github.petertrr:aigrette:0.3.0")\n\nउदाहरण:
\n\nimport io.github.petertrr.aigrette.*\n\ndata class Config(val name: String, val age: Int, val flag: Boo पुस्तकालय में भी
TypeScript में डेटा सत्यापन: Zod, Yup और io-ts लाइब्रेरीज़
parking_lot Rust: पूर्ण गाइड उदाहरणों के साथ
Swift में JWT टोकन: JSON Web Tokens के साथ काम करने की पूरी गाइड
जावा में PDF जनरेशन: iText, Apache PDFBox, OpenPDF लाइब्रेरीज़ का अवलोकन
PHP में भू-स्थान और मानचित्र: लाइब्रेरीज़, API और कोड उदाहरण