DSL-जैसे एपीआई बनाना
स्पष्टता के लिए इन्फ़िक्स का उपयोग करें
DSL-जैसे एपीआई बनाना, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
स्पष्टता के लिए इन्फिक्स
इन्फिक्स फ़ंक्शन कोटलिन के DSLs (डोमेन-विशिष्ट भाषाओं) का आधार हैं। वे एपीआई कॉल को स्वाभाविक वाक्यांशों की तरह पढ़ने योग्य बनाते हैं।
infix fun String.eq(value: String) = this == value
fun main() {
println("on" eq "on")
}एक प्रवाहपूर्ण बिल्डर का विचार
इन्फिक्स को छोटे प्रकारों के साथ मिलाने से आप उद्देश्य को घोषणात्मक ढंग से व्यक्त कर सकते हैं।
class Query(val field: String) {
infix fun equals(value: String) = "$field = '$value'"
}
fun main() {
val q = Query("name") equals "Sam"
println(q)
}Pair-आधारित विन्यास
इन्फिक्स to फ़ंक्शन पठनीय विन्यास मानचित्रों को संभव बनाता है।
fun configure(vararg opts: Pair<String, Any>) = opts.toMap()
fun main() {
val cfg = configure("debug" to true, "level" to 3)
println(cfg)
}रेंज DSL
इन्फिक्स की सहायता से रेंज बिल्डर अंग्रेज़ी जैसे पढ़े जाते हैं।
fun main() {
val r = 1 until 10 step 2
println(r.toList())
}शर्तों को संयोजित करना
आप इन्फिक्स फ़ंक्शन से पठनीय बूलियन-जैसे वाक्यांश बना सकते हैं।
data class Rule(val ok: Boolean) {
infix fun and(other: Rule) = Rule(ok && other.ok)
}
fun main() {
val result = Rule(true) and Rule(false)
println(result.ok)
}रिसीवर वाली लैम्ब्डा
वास्तविक DSLs में अक्सर इन्फिक्स को रिसीवर वाली लैम्ब्डा के साथ जोड़ा जाता है, जिससे कोई ब्लॉक किसी वस्तु को सीधे विन्यस्त कर सकता है।
class Html {
val parts = mutableListOf<String>()
fun p(text: String) { parts.add("<p>$text</p>") }
}
fun html(block: Html.() -> Unit): Html {
val h = Html()
h.block()
return h
}
fun main() {
val page = html { p("Hi") }
println(page.parts)
}रिसीवर लैम्ब्डा की व्याख्या
Html.() -> Unit जैसा फ़ंक्शन प्रकार ब्लॉक को ऐसे चलाता है मानो वह Html इंस्टेंस के भीतर हो, इसलिए सदस्यों को किसी उपसर्ग के बिना कॉल किया जा सकता है।
class Box { var value = 0 }
fun box(init: Box.() -> Unit): Box {
val b = Box()
b.init()
return b
}
fun main() {
val b = box { value = 42 }
println(b.value)
}एक लघु DSL के रूप में apply
मानक apply फ़ंक्शन स्वयं किसी वस्तु को विन्यस्त करने वाली रिसीवर-लैम्ब्डा DSL है।
class Server {
var host = ""
var port = 0
}
fun main() {
val s = Server().apply {
host = "localhost"
port = 8080
}
println("${s.host}:${s.port}")
}DSLs को पठनीय रखें
एक अच्छी DSL अनावश्यक शोर को कम करती है। ऐसे नामों को प्राथमिकता दें, जो कॉल स्थल को उद्देश्य के वर्णन जैसा पढ़ने योग्य बनाएँ।
data class Style(var bold: Boolean = false)
fun style(block: Style.() -> Unit) = Style().apply(block)
fun main() {
val s = style { bold = true }
println(s.bold)
}इन्फिक्स और लैम्ब्डा
इन्फिक्स फ़ंक्शन को लैम्ब्डा के साथ मिलाने से अभिव्यंजक बिल्डर बनते हैं।
class Table {
val rows = mutableListOf<String>()
infix fun row(text: String) { rows.add(text) }
}
fun table(block: Table.() -> Unit) = Table().apply(block)
fun main() {
val t = table {
row("A")
row("B")
}
println(t.rows)
}DSL कब बनाएँ
दोहराए जाने वाले, संरचित विन्यास (यूआई, बिल्डर, परीक्षण) के लिए DSLs उपयोगी होती हैं। एकबारगी तर्क के लिए सामान्य फ़ंक्शन अधिक सरल होते हैं।
fun main() {
val list = buildList {
add(1)
add(2)
}
println(list)
}त्वरित जाँच
DSL-जैसे एपीआई की अपनी समझ का परीक्षण कीजिए।
पुनरावलोकन
आपने DSL-जैसे एपीआई बनाना सीखा:
- इन्फिक्स फ़ंक्शन कॉल को वाक्यांशों की तरह पढ़ने योग्य बनाते हैं।
- रिसीवर लैम्ब्डा (
Type.() -> Unit) ब्लॉक को वस्तुओं को सीधे विन्यस्त करने देती हैं। applyऔरbuildListमानक लाइब्रेरी की DSLs हैं।- संरचित, दोहराए जाने वाले विन्यास के लिए DSLs का उपयोग करें और उन्हें पठनीय रखें।
class C { var x = 0 }
fun c(b: C.() -> Unit) = C().apply(b)
fun main() {
println(c { x = 9 }.x)
}एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “DSL-जैसे एपीआई बनाना” पाठ निःशुल्क है?
हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “DSL-जैसे एपीआई बनाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“DSL-जैसे एपीआई बनाना” में मैं क्या सीखूँगा?
स्पष्टता के लिए इन्फ़िक्स का उपयोग करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“DSL-जैसे एपीआई बनाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- इन्फ़िक्स फ़ंक्शन
- DSL-जैसे एपीआई बनाना
- tailrec फ़ंक्शन
- हर विकल्प का उपयोग कब करें