फंक्शनल बनाम OOP in C++: 2025 में क्या चुनें?

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

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

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

परिचय: OOP बनाम फंक्शनल दृष्टिकोण का विवाद क्यों खत्म नहीं होता?

\n\n

यदि आपने कभी सोचा है कि नए प्रोजेक्ट के लिए C++ में कौन सी प्रोग्रामिंग शैली चुनें, तो आप अकेले नहीं हैं। C++ में फंक्शनल प्रोग्रामिंग और ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण के बीच विवाद दशकों से चल रहा है। एक तरफ क्लासिक OOP है, जो विश्वविद्यालयों में पढ़ाया जाता है। दूसरी तरफ आधुनिक फंक्शनल तकनीकें हैं, जो C++11, C++14, C++17 और C++20 मानक लेकर आए हैं।

\n\n

साइट pythonlib.ru पर हम अक्सर आर्किटेक्चरल निर्णयों पर चर्चा करते हैं, और आज इस प्रश्न को हमेशा के लिए सुलझाने का समय आ गया है। कौन सी शैली तेज़ है? कौन सी बनाए रखना आसान है? और सबसे महत्वपूर्ण बात - क्या उन्हें जोड़ा जा सकता है?

\n\n

इस लेख में हम कट्टरता से एक प्रतिमान की रक्षा नहीं करेंगे। इसके बजाय, हम वास्तविक कोड उदाहरणों का विश्लेषण करेंगे, प्रत्येक दृष्टिकोण के फायदे और नुकसान दिखाएंगे और व्यावहारिक सुझाव देंगे। चलिए शुरू करते हैं!

\n\n

C++ में प्रतिमानों का संक्षिप्त अवलोकन

\n\n

गहराई में जाने से पहले, आइए जल्दी से याद करें कि बात किस बारे में है।

\n\n

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP)

\n\n

C++ में OOP तीन स्तंभों पर आधारित है: एनकैप्सुलेशन, इनहेरिटेंस और पॉलीमॉर्फिज्म। आप क्लासेस बनाते हैं जो डेटा और उनके प्रसंस्करण के तरीकों को जोड़ते हैं। यह क्लासिक दृष्टिकोण है जो 90 और 2000 के दशक में हावी था।

\n\n
class Animal {\npublic:\n    virtual void speak() const = 0;\n    virtual ~Animal() = default;\n};\n\nclass Dog : public Animal {\npublic:\n    void speak() const override {\n        std::cout << "Woof!" << std::endl;\n    }\n};\n\nclass Cat : public Animal {\npublic:\n    void speak() const override {\n        std::cout << "Meow!" << std::endl;\n    }\n};\n\nvoid makeSound(const Animal& animal) {\n    animal.speak();\n}\n
\n\n

फंक्शनल प्रोग्रामिंग (FP)

\n\n

C++ में फंक्शनल दृष्टिकोण शुद्ध Haskell नहीं है, बल्कि एक अनिवार्य भाषा के ढांचे में FP के विचारों का उपयोग है। मुख्य तत्व: लैम्ब्डा-फंक्शन, डेटा की अपरिवर्तनीयता, उच्च-क्रम फंक्शन और कम्पोज़ीशन।

\n\n
std::vector<int> numbers = {1, 2, 3, 4, 5};\n\n// फंक्शनल शैली: फ़िल्टरिंग और ट्रांसफॉर्मेशन\nauto result = numbers\n    | std::views::filter([](int n) { return n % 2 == 0; })\n    | std::views::transform([](int n) { return n * n; });\n\nfor (int n : result) {\n    std::cout << n << " ";  // आउटपुट: 4 16\n}\n
\n\n

व्यवहार में तुलना: तीन विशिष्ट कार्य

\n\n

आइए तीन वास्तविक कार्य लें जिनका सामना C++ डेवलपर करता है, और देखें कि OOP और FP उन्हें कैसे हल करते हैं।

\n\n

कार्य 1: डेटा संग्रह का प्रसंस्करण

\n\n

शर्त: ऑर्डर की एक सूची है, महंगे (मूल्य > 1000) को फ़िल्टर करना है, तिथि के अनुसार सॉर्ट करना है और शीर्ष-5 प्रदर्शित करना है।

\n\n

OOP शैली:

\n\n
class OrderProcessor {\npublic:\n    void addOrder(Order order) { orders_.push_back(std::move(order)); }\n    \n    std::vector<Order> getTopExpensiveRecent(int count) const {\n        auto filtered = orders_;\n        filtered.erase(\n            std::remove_if(filtered.begin(), filtered.end(),\n                           [](const Order& o) { return o.price <= 1000; }),\n            filtered.end());\n        \n        std::sort(filtered.begin(), filtered.end(),\n                  [](const Order& a, const Order& b) {\n                      return a.date > b.date;\n                  });\n        \n        if (filtered.size() > count) {\n            filtered.resize(count);\n        }\n        return filtered;\n    }\n    \nprivate:\n    std::vector<Order> orders_;\n};\n
\n\n

फंक्शनल शैली:

\n\n
auto getTopExpensiveRecent(const std::vector<Order>& orders, int count) {\n    return orders\n        | std::views::filter([](const Order& o) { return o.price >                

ब्लॉग

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