Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास · पाठ

Clojure मैक्रो को समझना

मैक्रो की अवधारणा का अन्वेषण करें, समझें कि वे फ़ंक्शन से कैसे अलग हैं और Clojure के वाक्य-विन्यास का विस्तार करने में उनकी शक्ति जानें

पाठ 1, कुल 4 में से11 चरण

Clojure मैक्रो को समझना, CoddyKit पर Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Clojure मैक्रो: कोड लिखने वाला कोड

Clojure मैक्रो की दुनिया में आपका स्वागत है! मैक्रो एक शक्तिशाली सुविधा है, जो आपको Clojure के वाक्य-विन्यास का विस्तार करने देती है।

इन्हें ऐसे कोड के रूप में समझिए, जो कोड के चलने से पहले दूसरे कोड पर काम करता है। इनके माध्यम से आप अपनी आवश्यकताओं के अनुरूप नई भाषा संरचनाएँ बना सकते हैं।

मैक्रो और फ़ंक्शन: मुख्य अंतर

यह समझना अत्यंत महत्वपूर्ण है कि मैक्रो सामान्य फ़ंक्शन से किस तरह अलग होते हैं:

  • फ़ंक्शन: रनटाइम पर चलते हैं। वे तर्क के रूप में डेटा लेते हैं और डेटा लौटाते हैं।
  • मैक्रो: संकलन समय पर चलते हैं। वे तर्क के रूप में कोड (या रूप) लेते हैं और कोड लौटाते हैं।

मैक्रो प्रोग्राम के चलना शुरू होने से पहले ही आपके कोड को बदल देते हैं!

Clojure का कोड डेटा के रूप में (समरूप-चिह्नात्मकता)

Clojure समरूप-चिह्नात्मक है, अर्थात इसका कोड मानक डेटा संरचनाओं के रूप में दर्शाया जाता है। मैक्रो के लिए यह बहुत महत्वपूर्ण है!

  • कोड सूचियों, वेक्टरों और प्रतीकों के रूप में लिखा जाता है।
  • मैक्रो इन डेटा संरचनाओं को इनपुट के रूप में प्राप्त करते हैं।
  • वे इन डेटा संरचनाओं में बदलाव करके नया कोड बनाते हैं।

"डेटा के रूप में कोड" का यह तरीका मैक्रो को अत्यंत लचीला बनाता है।

उद्धरण: मूल्यांकन रोकना

कोड के साथ डेटा के रूप में काम करने के लिए हमें उसका तुरंत मूल्यांकन होने से रोकना पड़ता है। यहीं उद्धरण उपयोगी होता है।

आप Clojure को यह बताने के लिए (quote ...) या संक्षिप्त रूप ' का उपयोग कर सकते हैं: "इसे निष्पादित किए जाने वाले कोड के रूप में नहीं, बल्कि डेटा के रूप में समझें।"

इस उदाहरण को चलाकर देखिए:

(defn -main []
  (println (quote (+ 1 2)))
  (println '(+ 1 2))
  (println (type '(+ 1 2))))

उद्धरण हटाना: कोड में मान डालना

जब आप मैक्रो से नया कोड बना रहे होते हैं, तो अक्सर आपको उद्धृत कोड में वास्तविक मान या मूल्यांकित अभिव्यक्तियाँ डालने की आवश्यकता होती है।

यह उद्धरण हटाने के माध्यम से किया जाता है, जिसके लिए (unquote ...) या संक्षिप्त रूप ~ का उपयोग होता है। यह Clojure को बताता है: "उद्धृत कोड के अंदर होने पर भी इस हिस्से का मूल्यांकन करें।"

बैकटिक ` वाक्य-विन्यास-उद्धरण है, जो उद्धरण हटाए गए हिस्से को छोड़कर बाकी सभी चीज़ों का स्वचालित रूप से उद्धरण करता है। इसका उपयोग अक्सर मैक्रो के लिए किया जाता है।

इसे कार्य करते हुए देखिए:

(defn -main []
  (let [x 10]
    (println `(do-something ~x (+ ~x 5))))
  (let [name "Alice"]
    (println `(greet ~name))))

क्रम-संयोजन द्वारा उद्धरण हटाना: अनुक्रम डालना

यदि आपके पास वस्तुओं का एक अनुक्रम हो और आप उन्हें उद्धृत सूची में अलग-अलग तत्वों के रूप में डालना चाहें, तो क्या होगा?

यहीं क्रम-संयोजन द्वारा उद्धरण हटाना ((unquote-splicing ...) या ~@) उपयोगी होता है। यह अनुक्रम के तत्वों को सीधे आसपास की सूची में "जोड़ देता" है।

यह उन मैक्रो के लिए बहुत उपयोगी है, जो तर्कों की परिवर्ती संख्या लेते हैं।

(defn -main []
  (let [args '(a b c)]
    (println `(my-function 1 2 ~@args 3))))

सरल मैक्रो बनाना: `my-when`

आइए Clojure के when जैसा एक मैक्रो बनाएँ। हमारा my-when मैक्रो किसी परीक्षण अभिव्यक्ति के TRUE होने पर ही कोड के मुख्य भाग को चलाएगा।

ध्यान दें कि हम समग्र संरचना के लिए `, परीक्षण के लिए ~ और मुख्य भाग की अभिव्यक्तियों के लिए ~@ का उपयोग करते हैं।

(defmacro my-when [test & body]
  `(if ~test
     (do ~@body)))

(defn -main []
  (my-when true
    (println "It's true!")
    (println "Multiple forms run."))

  (my-when false
    (println "This won't run.")))

मैक्रो विस्तार का निरीक्षण

यह समझने के लिए कि आपका मैक्रो क्या कर रहा है, आप उसके विस्तार का निरीक्षण कर सकते हैं।

  • macroexpand-1: सबसे बाहरी मैक्रो कॉल का एक बार विस्तार करता है।
  • macroexpand: सभी नेस्टेड मैक्रो कॉल का तब तक विस्तार करता है, जब तक कोई और मैक्रो विस्तारित न किया जा सके।

मैक्रो में त्रुटि-निवारण के लिए ये फ़ंक्शन अत्यंत उपयोगी हैं!

(defmacro my-when [test & body]
  `(if ~test
     (do ~@body)))

(defn -main []
  (println "\nMacroexpand-1:")
  (println (macroexpand-1 '(my-when true (println "Hello"))))

  (println "\nMacroexpand (full expansion):")
  (println (macroexpand '(my-when true (println "Hello")))))

मैक्रो स्वच्छता और जेनसिम

मैक्रो के साथ एक सामान्य समस्या नाम अधिग्रहण है। ऐसा तब होता है, जब आपके मैक्रो के विस्तार में कोई प्रतीक गलती से उस कोड के प्रतीक से टकरा जाता है, जहाँ मैक्रो का उपयोग किया गया है।

इसे रोकने के लिए आप जेनसिम (उत्पन्न प्रतीक) का उपयोग कर सकते हैं, जो अद्वितीय होने की गारंटी रखते हैं। वाक्य-विन्यास-उद्धरण में, किसी प्रतीक के बाद # लगाकर उसे जेनसिम बनाया जा सकता है, जैसे `foo#।

इससे यह सुनिश्चित होता है कि आपके मैक्रो के आंतरिक चर उपयोगकर्ता द्वारा परिभाषित चरों से न टकराएँ।

अपने मैक्रो ज्ञान की जाँच करें

आइए Clojure मैक्रो और उनकी मुख्य अवधारणाओं की आपकी समझ जाँचें।

पुनरावृत्ति: Clojure मैक्रो में निपुणता

अब आपने Clojure मैक्रो की शक्तिशाली दुनिया का अध्ययन कर लिया है!

  • मैक्रो संकलन-समय पर काम करने वाली संरचनाएँ हैं, जो कोड को बदलती हैं।
  • वे Clojure की समरूप-चिह्नात्मकता (डेटा के रूप में कोड) का लाभ उठाते हैं।
  • मुख्य साधनों में कोड के रूपों में बदलाव करने के लिए quote ('), unquote (~) और splice unquote (~@) शामिल हैं।
  • syntax-quote (`) मैक्रो लिखने का सुविधाजनक तरीका है।
  • macroexpand जैसे साधन और जेनसिम मज़बूत मैक्रो लिखने तथा उनमें त्रुटि-निवारण में सहायता करते हैं।

Clojure के भीतर अत्यंत अभिव्यंजक और विषय-विशिष्ट भाषाएँ बनाने के लिए मैक्रो उन्नत, लेकिन अमूल्य साधन हैं। प्रयोग करते रहें!

शुरुआत निःशुल्क

एआई शिक्षक के साथ Clojure सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “Clojure मैक्रो को समझना” पाठ निःशुल्क है?

हाँ—“Clojure मैक्रो को समझना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Clojure मैक्रो को समझना” में मैं क्या सीखूँगा?

मैक्रो की अवधारणा का अन्वेषण करें, समझें कि वे फ़ंक्शन से कैसे अलग हैं और Clojure के वाक्य-विन्यास का विस्तार करने में उनकी शक्ति जानें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Clojure मैक्रो को समझना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Clojure मैक्रो को समझना
  2. नेमस्पेस परिभाषित करना और उनका उपयोग
  3. मॉड्यूल से कोड का संगठन
  4. बहुरूपता के लिए प्रोटोकॉल और मल्टीमेथड
← Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पर वापस जाएँ