PHP में कार्यात्मक प्रोग्रामिंग: उन्नत स्तर
\n\nकार्यात्मक प्रोग्रामिंग (FP) एक प्रतिमान है जिसमें गणनाओं को गणितीय फलनों की गणना के रूप में देखा जाता है, और स्थिति में परिवर्तन तथा परिवर्तनीय डेटा से बचा जाता है। हालाँकि PHP को शुरू में विशुद्ध रूप से कार्यात्मक भाषा के रूप में डिज़ाइन नहीं किया गया था, लेकिन संस्करण 7.4 से और विशेष रूप से PHP 8.x में, इसमें कार्यात्मक शैली में कोड लिखने के लिए शक्तिशाली उपकरण मिले हैं। इस लेख में, हम PHP में FP की उन्नत अवधारणाओं पर चर्चा करेंगे: उच्च-क्रम फलनों से लेकर मोनाड तक, व्यावहारिक उदाहरणों और सिफारिशों के साथ।
\n\n1. उच्च-क्रम फलन और क्लोज़र
\n\nउच्च-क्रम फलन वे फलन हैं जो अन्य फलनों को तर्क के रूप में लेते हैं या उन्हें लौटाते हैं। PHP में, यह अनाम फलनों (क्लोज़र) और अंतर्निहित फलनों array_map, array_filter, array_reduce के माध्यम से कार्यान्वित किया जाता है।
उदाहरण: फ़िल्टरिंग के लिए कॉलबैक फलन
\n\n<?php\n$numbers = [1, 2, 3, 4, 5, 6];\n\n// उच्च-क्रम फलन\n$filterEven = function(array $items, callable $callback): array {\n $result = [];\n foreach ($items as $item) {\n if ($callback($item)) {\n $result[] = $item;\n }\n }\n return $result;\n};\n\n// अनाम विधेय फलन\n$isEven = fn($n) => $n % 2 === 0;\n\n$evenNumbers = $filterEven($numbers, $isEven);\n// परिणाम: [2, 4, 6]\nprint_r($evenNumbers);\n?>\n\n\nउदाहरण: फलन फैक्ट्री (स्थिति के साथ क्लोज़र)
\n\n<?php\nfunction createMultiplier(float $factor): callable {\n // क्लोज़र $factor को "याद" रखता है\n return fn($number) => $number * $factor;\n}\n\n$double = createMultiplier(2);\n$triple = createMultiplier(3);\n\necho $double(5); // 10\necho $triple(5); // 15\n?>\n\n\nPHP में क्लोज़र use के माध्यम से बाहरी दायरे से चरों को कैप्चर करने की अनुमति देते हैं (PHP 7.4+ में एरो फलन fn का उपयोग किया जा सकता है)। यह करीइंग और आंशिक अनुप्रयोग के निर्माण का आधार है।
2. करीइंग और आंशिक अनुप्रयोग
\n\nकरीइंग एक फलन को कई तर्कों से एक तर्क वाले फलनों के अनुक्रम में बदलना है। आंशिक अनुप्रयोग फलन के कुछ तर्कों को स्थिर करना है। PHP में कोई अंतर्निहित समर्थन नहीं है, लेकिन इसे आसानी से कार्यान्वित किया जा सकता है।
\n\nउदाहरण: मैन्युअल करीइंग
\n\n<?php\n// सामान्य फलन\nfunction add(int $a, int $b): int {\n return $a + $b;\n}\n\n// करीड संस्करण\n$curriedAdd = function(int $a): callable {\n return function(int $b) use ($a): int {\n return $a + $b;\n };\n};\n\n$addFive = $curriedAdd(5);\necho $addFive(3); // 8\n?>\n\n\nउदाहरण: सार्वभौमिक करीइंग फलन
\n\n<?php\nfunction curry(callable $fn, int $arity = null): callable {\n $reflection = new ReflectionFunction($fn);\n $arity = $arity ?? $reflection->getNumberOfRequiredParameters();\n\n $curry = function(...$args) use ($fn, $arity, &$curry) {\n if (count($args) >= $arity) {\n return $fn(...$args);\n }\n return function(...$nextArgs) use ($fn, $args, $arity, $curry) {\n return $curry(...array_merge($args, $nextArgs));\n };\n };\n\n return $curry;\n}\n\n$add = function(int $a, int $b, int $c): int {\n return $a + $b + $c;\n};\n\n$curriedAdd = curry($add);\n$result = $curriedAdd(1)(2)(3); // 6\necho $result;\n?>\n\n\nकरीइंग विशेष रूप से फलन संयोजन और सामान्य फलनों के विशिष्ट संस्करण बनाने में उपयोगी है।
\n\n3. फलन संयोजन और कार्यात्मक पैटर्न
\n\nफलन संयोजन कई फलनों को क्रमिक रूप से लागू करके एक नया फलन बनाना है। एक फलन का परिणाम अगले फलन के इनपुट के रूप में दिया जाता है।
\n\nउदाहरण: "बाएँ से दाएँ" संयोजन (pipe)