DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग
प्रवाहपूर्ण बिल्डर API और चेन की जा सकने वाली अभिव्यक्तियाँ बनाने के लिए मेटामेथड का उपयोग करें।
DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
मेटामेथड ऑपरेटर DSL को सक्षम करते हैं
अंकगणितीय और तुलना वाले मेटामेथड को ओवरलोड करके, आप Lua एक्सप्रेशन को मानों की गणना करने के बजाय डोमेन ऑब्जेक्ट बनाने योग्य बना सकते हैं।
मेटामेथड के साथ क्वेरी बिल्डर
ऐसा QueryExpr प्रकार परिभाषित करें जिसमें >, < और == शर्त वाले ऑब्जेक्ट बनाएँ।
local QueryExpr = {}
QueryExpr.__index = QueryExpr
function QueryExpr.new(field)
return setmetatable({field=field, conditions={}}, QueryExpr)
end
QueryExpr.__lt = function(self, val)
return {field=self.field, op="<", value=val}
end
QueryExpr.__gt = function(self, val)
return {field=self.field, op=">", value=val}
endक्वेरी DSL का उपयोग
शुद्ध Lua में SQL जैसी शर्तें लिखें।
local age = QueryExpr.new("age")
local cond = age > 18 -- {field="age", op=">", value=18}
print(cond.field, cond.op, cond.value)फ्लुएंट API के लिए अंकगणित
DSL अवयवों को संयोजित करने के लिए + और * को ओवरलोड करें।
local Schema = {}
Schema.__index = Schema
Schema.__add = function(a, b)
return setmetatable({a, b}, Schema) -- compose schemas
end
local combined = Schema.string + Schema.numberस्ट्रिंग बिल्डर के लिए __concat
बिल्डर ऑब्जेक्ट में खंड जोड़ने के लिए .. को ओवरलोड करें।
local SQL = {}
SQL.__index = SQL
SQL.__concat = function(self, s)
self.parts[#self.parts+1] = s
return self
end
local query = SQL.new() .. "SELECT * " .. "FROM users " .. "WHERE age > 18"कॉल किए जा सकने वाले ऑब्जेक्ट के लिए __call
तालिकाओं को कॉल किए जा सकने योग्य बनाने के लिए __call को ओवरलोड करें, जिससे ऑब्जेक्ट पर फ़ंक्शन-कॉल जैसी वाक्यरचना संभव होती है।
local Route = setmetatable({}, {
__call = function(self, path)
return setmetatable({path=path}, Route)
end
})
Route("/api/users"):get(handler)निषेध के लिए __unm
शर्तों में NOT का अर्थ जोड़ने के लिए यूनरी माइनस __unm को ओवरलोड करें।
QueryExpr.__unm = function(self)
return {field=self.field, op="NOT", inner=self}
end
local notActive = -status -- NOT active conditionफ्लुएंट इंटरफ़ेस पैटर्न
चेनिंग सक्षम करने के लिए प्रत्येक विधि self लौटाती है: query:where(cond):orderBy("age"):limit(10)।
ऑपरेटर ओवरलोडिंग की कमियाँ
ओवरलोड किए गए ऑपरेटर उन पाठकों को चौंका सकते हैं जो मानक अर्थ की अपेक्षा करते हैं। DSL का पूरी तरह दस्तावेज़ीकरण करें और स्पष्ट फ़ंक्शन विकल्प देने पर विचार करें।
ऑपरेटर DSL का परीक्षण
हर ऑपरेटर संयोजन का परीक्षण करें। ऐसे DSL व्यंजक जो संकलित तो हो जाते हैं, लेकिन गलत शर्त ऑब्जेक्ट बनाते हैं, मौन त्रुटियाँ उत्पन्न करते हैं।
पठनीयता बनाम चतुराई
केवल उन्हीं ऑपरेटरों को ओवरलोड करें जिनका अर्थ स्पष्ट और सहज हो। ऐसी चतुराई से बचें जिसके लिए पाठक को यह जानना पड़े कि ओवरलोडिंग सक्रिय है।
ऑपरेटर ओवरलोडिंग संबंधी प्रश्न
संख्याओं की तुलना करने के बजाय क्वेरी की शर्त बनाने के लिए > के उपयोग को कौन-सा मेटामेथड सक्षम करता है?
पुनरावलोकन: DSL के लिए ऑपरेटर ओवरलोडिंग
मेटामेथड (__lt, __gt, __add, __concat, __call) DSL व्यंजकों को डोमेन ऑब्जेक्ट बनाने देते हैं। इनका उपयोग केवल वहीं करें जहाँ अर्थ स्पष्ट हो। फ़्लुएंट इंटरफ़ेस चेनिंग के लिए स्वयं को लौटाते हैं।
एआई शिक्षक के साथ Lua सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 40
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग” पाठ निःशुल्क है?
हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग” में मैं क्या सीखूँगा?
प्रवाहपूर्ण बिल्डर API और चेन की जा सकने वाली अभिव्यक्तियाँ बनाने के लिए मेटामेथड का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Lua में DSL डिज़ाइन सिद्धांत
- DSL प्रवाह के लिए ऑपरेटर ओवरलोडिंग
- कॉन्फ़िगरेशन DSL बनाना
- सरल अभिव्यक्ति पार्सर