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

प्रथम-श्रेणी और उच्च-क्रम के फ़ंक्शन

फ़ंक्शन को मानों के रूप में समझें, उन्हें एक स्थान से दूसरे स्थान पर भेजना सीखें और शक्तिशाली उच्च-क्रम के फ़ंक्शन बनाएँ

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

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

फ़ंक्शन: प्रथम-श्रेणी के नागरिक

Clojure में फ़ंक्शन "प्रथम-श्रेणी के नागरिक" होते हैं। इसका अर्थ है कि उन्हें किसी भी अन्य मान, जैसे संख्या या स्ट्रिंग, की तरह माना जाता है।

आप ये कर सकते हैं:

  • उन्हें वैरिएबल में असाइन कर सकते हैं।
  • उन्हें अन्य फ़ंक्शन के आर्ग्युमेंट के रूप में पास कर सकते हैं।
  • उन्हें अन्य फ़ंक्शन के परिणाम के रूप में लौटा सकते हैं।

यह शक्तिशाली अवधारणा फंक्शनल प्रोग्रामिंग की आधारशिला है!

फ़ंक्शन को नाम असाइन करना

देखते हैं कि def या let का उपयोग करके फ़ंक्शन को किसी नाम से असाइन कर हम उन्हें मानों की तरह कैसे扱 सकते हैं। इसे फ़ंक्शन को उपनाम देने जैसा समझें।

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

(ns coddykit.core
  (:gen-class))

(defn greet [name]
  (str "Hello, " name "!"))

(defn -main [& args]
  (println "--- Output ---")
  (def my-greeting greet) ; Assign 'greet' function to 'my-greeting'
  (println (my-greeting "Alice")))

फ़ंक्शन को आर्ग्युमेंट के रूप में पास करना

प्रथम-श्रेणी के फ़ंक्शन का एक महत्वपूर्ण पहलू यह है कि उन्हें अन्य फ़ंक्शन के आर्ग्युमेंट के रूप में पास किया जा सकता है। इससे कोड अत्यंत लचीला और पुनः उपयोग योग्य बनता है।

ऐसे फ़ंक्शन की कल्पना करें, जो कोई ऑपरेशन करता है, लेकिन वह कौन-सा ऑपरेशन करेगा, यह आपके द्वारा पास किए गए दूसरे फ़ंक्शन से तय होता है!

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

(ns coddykit.core
  (:gen-class))

(defn operate [f x y]
  (f x y)) ; Call the function 'f' with arguments 'x' and 'y'

(defn -main [& args]
  (println "--- Output ---")
  (println (operate + 5 3)) ; Pass the '+' function
  (println (operate * 5 3))) ; Pass the '*' function

फ़ंक्शन लौटाने वाले फ़ंक्शन

फ़ंक्शन नए फ़ंक्शन बना और लौटा भी सकते हैं। यह ऐसे "फ़ंक्शन कारखाने" बनाने में उपयोगी है, जो किसी इनपुट के आधार पर विशेष फ़ंक्शन तैयार करते हैं।

यहाँ make-adder एक संख्या लेता है और एक नया फ़ंक्शन लौटाता है, जो उस संख्या को अपने इनपुट में जोड़ता है।

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

(ns coddykit.core
  (:gen-class))

(defn make-adder [x]
  (fn [y] (+ x y))) ; Returns an anonymous function

(defn -main [& args]
  (println "--- Output ---")
  (def add-five (make-adder 5))
  (def add-ten (make-adder 10))
  (println (add-five 2))
  (println (add-ten 2)))

हायर-ऑर्डर फ़ंक्शन क्या हैं?

जब कोई फ़ंक्शन एक या अधिक फ़ंक्शन को आर्ग्युमेंट के रूप में लेता है या परिणाम के रूप में कोई फ़ंक्शन लौटाता है, तो उसे हायर-ऑर्डर फ़ंक्शन (HOF) कहा जाता है।

HOF अत्यंत शक्तिशाली होते हैं, क्योंकि वे आपको ये करने देते हैं:

  • सामान्य पैटर्न को अमूर्त बनाना।
  • अधिक संक्षिप्त और अभिव्यंजक कोड लिखना।
  • लचीले और पुनः उपयोग योग्य प्रोग्राम घटक बनाना।

आइए Clojure के कुछ सामान्य HOF देखें!

`map` से रूपांतरण

map एक मूलभूत हायर-ऑर्डर फ़ंक्शन है। यह दिए गए फ़ंक्शन को संग्रह की प्रत्येक वस्तु (जैसे सूची या वेक्टर) पर लागू करता है और परिणामों वाला एक नया संग्रह लौटाता है।

मूल संग्रह को बदले बिना डेटा का रूपांतरण करने के लिए यह आदर्श है।

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

(ns coddykit.core
  (:gen-class))

(defn square [x] (* x x))

(defn -main [& args]
  (println "--- Output ---")
  (def numbers [1 2 3 4])
  (def squared-numbers (map square numbers))
  (println "Original numbers:" numbers)
  (println "Squared numbers:" squared-numbers))

`filter` से संग्रह फ़िल्टर करना

filter HOF एक "प्रेडिकेट" फ़ंक्शन (जो true या false लौटाता है) और एक संग्रह लेता है। यह केवल वे तत्व वाला नया संग्रह लौटाता है, जिनके लिए प्रेडिकेट फ़ंक्शन true लौटाता है।

सूची से विशिष्ट आइटम चुनने के लिए यह बहुत उपयोगी है।

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

(ns coddykit.core
  (:gen-class))

(defn is-even? [n]
  (= (mod n 2) 0))

(defn -main [& args]
  (println "--- Output ---")
  (def numbers (range 1 11)) ; Numbers from 1 to 10
  (def even-numbers (filter is-even? numbers))
  (println "All numbers:" numbers)
  (println "Even numbers:" even-numbers))

`reduce` से संयोजन

reduce एक और शक्तिशाली HOF है, जो संग्रह के सभी तत्वों को एक परिणाम में संयोजित करता है। यह एक संयोजक फ़ंक्शन, एक वैकल्पिक प्रारंभिक मान और एक संग्रह लेता है।

यह फ़ंक्शन प्रत्येक आइटम पर क्रमिक रूप से लागू होता है और अक्सर योग निकालने, अधिकतम/न्यूनतम मान खोजने या जोड़ने के लिए उपयोग किया जाता है।

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

(ns coddykit.core
  (:gen-class))

(defn -main [& args]
  (println "--- Output ---")
  (def numbers [1 2 3 4 5])
  (def sum (reduce + numbers)) ; Sums all numbers
  (def product (reduce * numbers)) ; Multiplies all numbers
  (println "Numbers:" numbers)
  (println "Sum:" sum)
  (println "Product:" product))

त्वरित फ़ंक्शन: लैम्ब्डा

अक्सर HOF को दिए जाने वाले फ़ंक्शन छोटे होते हैं और केवल एक बार उपयोग किए जाते हैं। इनके लिए Clojure अनाम फ़ंक्शन देती है, जिन्हें लैम्ब्डा भी कहा जाता है।

इनमें संक्षिप्त #(...) सिंटैक्स का उपयोग होता है, जहाँ % पहले आर्ग्युमेंट, %1 पहले, %2 दूसरे आर्ग्युमेंट और इसी तरह आगे के आर्ग्युमेंट को दर्शाता है।

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

(ns coddykit.core
  (:gen-class))

(defn -main [& args]
  (println "--- Output ---")
  (def numbers [1 2 3 4])
  (def doubled-numbers (map #(* % 2) numbers)) ; Anonymous function
  (def greater-than-two (filter #(> % 2) numbers)) ; Another anonymous function
  (println "Doubled:" doubled-numbers)
  (println "Greater than 2:" greater-than-two))

HOF का प्रयोग

आप प्रथम-श्रेणी और हायर-ऑर्डर फ़ंक्शन के बारे में सीख चुके हैं। अब जाँचते हैं कि विशिष्ट डेटा रूपांतरण करने के लिए इन्हें कैसे संयोजित किया जा सकता है।

संख्याओं के अनुक्रम (range 1 6) पर विचार करें, जिसका मूल्यांकन (1 2 3 4 5) के रूप में होता है।

इस अनुक्रम से वर्ग किए गए सम संख्या की सूची प्राप्त करने के लिए कौन-सा Clojure एक्सप्रेशन हायर-ऑर्डर फ़ंक्शन का सही उपयोग करता है?

पुनरावृत्ति: सुपरपावर के रूप में फ़ंक्शन

बधाई हो! आपने Clojure में प्रथम-श्रेणी और हायर-ऑर्डर फ़ंक्शन की शक्ति समझ ली है!

हमने ये विषय कवर किए:

  • प्रथम-श्रेणी के फ़ंक्शन: फ़ंक्शन को किसी भी अन्य डेटा प्रकार की तरह माना जा सकता है—वैरिएबल में असाइन किया जा सकता है, आर्ग्युमेंट के रूप में पास किया जा सकता है और अन्य फ़ंक्शन से लौटाया जा सकता है।
  • हायर-ऑर्डर फ़ंक्शन: ऐसे फ़ंक्शन, जो अन्य फ़ंक्शन पर काम करते हैं (उन्हें आर्ग्युमेंट के रूप में लेते हैं या लौटाते हैं)।
  • मुख्य HOF: हमने रूपांतरण के लिए map, चयन के लिए filter और एकत्रीकरण के लिए reduce का अध्ययन किया।
  • अनाम फ़ंक्शन: संक्षिप्त, इनलाइन फ़ंक्शन परिभाषाओं के लिए #(...) सिंटैक्स।

अभिव्यंजक और लचीला Clojure कोड लिखने के लिए ये अवधारणाएँ केंद्रीय हैं। अभ्यास करते रहें!

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

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

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

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

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

क्या “प्रथम-श्रेणी और उच्च-क्रम के फ़ंक्शन” पाठ निःशुल्क है?

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

“प्रथम-श्रेणी और उच्च-क्रम के फ़ंक्शन” में मैं क्या सीखूँगा?

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

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

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

“प्रथम-श्रेणी और उच्च-क्रम के फ़ंक्शन” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. प्रथम-श्रेणी और उच्च-क्रम के फ़ंक्शन
  2. अपरिवर्तनीयता और स्थायी डेटा
  3. विलंबित अनुक्रम और प्रदर्शन
  4. संयोज्य रूपांतरणों के लिए ट्रांसड्यूसर
← Clojure में कार्यात्मक प्रोग्रामिंग और JVM बैकएंड विकास पर वापस जाएँ