C++ में कार्यात्मक प्रोग्रामिंग: आधुनिक सुविधाएँ और उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें
```html

C++ में कार्यात्मक प्रोग्रामिंग: आधुनिक सुविधाएँ और उदाहरण



कार्यात्मक प्रोग्रामिंग (Functional Programming - FP) एक प्रतिमान है जिसमें गणनाओं को गणितीय फलनों की गणना के रूप में देखा जाता है, जो स्थिति में परिवर्तन और परिवर्तनीय डेटा से बचते हैं। हालाँकि C++ पारंपरिक रूप से ऑब्जेक्ट-ओरिएंटेड और प्रक्रियात्मक प्रोग्रामिंग से जुड़ा है, C++11 से शुरू होकर विशेष रूप से C++14/17/20 में, भाषा को कार्यात्मक शैली के लिए शक्तिशाली उपकरण मिले हैं। इस लेख में, हम प्रमुख अवधारणाओं पर चर्चा करेंगे जो आपके C++ कोड को अधिक संक्षिप्त, सुरक्षित और अभिव्यंजक बनाएंगी।



1. लैम्ब्डा एक्सप्रेशन और क्लोज़र



लैम्ब्डा एक्सप्रेशन अनाम फलन (anonymous functions) होते हैं जिनका उपयोग सीधे स्थान पर किया जा सकता है। वे C++ में कार्यात्मक प्रोग्रामिंग की नींव बन गए हैं। लैम्ब्डा पर्यावरण से चरों को कैप्चर करता है (क्लोज़र) और इसे STL एल्गोरिदम में पास किया जा सकता है।



लैम्ब्डा एक्सप्रेशन का सिंटैक्स

auto lambda = [कैप्चर](पैरामीटर) -> वापसी_प्रकार { बॉडी };


उदाहरण: लैम्ब्डा के साथ सॉर्टिंग

#include <iostream>#include <vector>#include <algorithm>

int main() { std::vector<int> nums = {5, 2, 8, 1, 9}; // घटते क्रम में सॉर्टिंग std::sort(nums.begin(), nums.end(), [](int a, int b) { return a > b; }); for (int n : nums) std::cout << n << " "; // 9 8 5 2 1 return 0;}


क्लोज़र: मान द्वारा और संदर्भ द्वारा कैप्चर

#include <iostream>#include <vector>#include <algorithm>

int main() { int threshold = 5; std::vector<int> data = {1, 6, 3, 8, 2}; // मान द्वारा कैप्चर [=] - threshold की प्रतिलिपि auto count_greater = std::count_if(data.begin(), data.end(), [=](int x) { return x > threshold; }); // संदर्भ द्वारा कैप्चर [&] - संशोधित किया जा सकता है auto modify = [&](int &x) { if (x < threshold) x += threshold; }; std::for_each(data.begin(), data.end(), modify); std::cout << "Count: " << count_greater << ""; // Count: 2 for (int n : data) std::cout << n << " "; // 6 6 8 8 7 return 0;}


2. फंक्टर और std::function



फंक्टर वे वर्ग ऑब्जेक्ट होते हैं जो operator() ऑपरेटर को ओवरलोड करते हैं। वे स्थिति संग्रहीत कर सकते हैं और फलनों की तरह व्यवहार कर सकते हैं। std::function किसी भी कॉल करने योग्य ऑब्जेक्ट को संग्रहीत करने के लिए एक बहुरूपी आवरण (polymorphic wrapper) है।



फंक्टर का उदाहरण

#include <iostream>

class Adder {private: int base;public: Adder(int b) : base(b) {} int operator()(int x) const { return base + x; }};

int main() { Adder add5(5); std::cout << add5(10) << ""; // 15 std::cout << add5(20) << ""; // 25 return 0;}


std::function: सार्वभौमिक आवरण

#include <iostream>#include <functional>#include <vector>

void process(const std::vector<int>& data, std::function<bool(int)> predicate) { for (int x : data) { if (predicate(x)) std::cout << x << " "; } std::cout << "";}

int main() { std::vector<int> numbers = {1, 2, 3, 4, 5, 6}; // लैम्ब्डा पास किए जा सकते हैं process(numbers, [](int n) { return n % 2 == 0; }); // 2 4 6 process(numbers, [](int n) { return n > 3; }); // 4 5 6 // और फंक्टर भी struct GreaterThan { int limit; bool operator()(int n) const { return n > limit; } }; process(numbers, GreaterThan{4}); // 5 6 return 0;}


3. कार्यात्मक शैली में STL एल्गोरिदम



STL लाइब्रेरी कई एल्गोरिदम प्रदान करती है जो लैम्ब्डा और फंक्टर के साथ पूरी तरह से मेल खाते हैं। लूप के बजाय std::transf का उपयोग करें

```

ब्लॉग

पुस्तक अनुशंसाएँ