करीइंग एक कार्यात्मक प्रोग्रामिंग तकनीक है जो एक फ़ंक्शन को कई तर्कों के साथ कार्यों के अनुक्रम में बदल देती है, प्रत्येक एक एकल तर्क लेता है। यह दृष्टिकोण अधिक मॉड्यूलर और पुन: प्रयोज्य फ़ंक्शन बनाने के लिए विशेष रूप से उपयोगी है, जो तर्कों के आंशिक अनुप्रयोग की अनुमति देता है। टाइपस्क्रिप्ट में, एक कुशल करी फ़ंक्शन को लागू करने के लिए सावधानीपूर्वक प्रकार प्रबंधन की आवश्यकता होती है, खासकर जब विभिन्न प्रकार के तर्कों से निपटते हैं।
इस लेख में, हम टाइपस्क्रिप्ट में करी फ़ंक्शन के दो अलग-अलग कार्यान्वयनों का पता लगाएंगे। पहला स्थैतिक प्रकारों के साथ इंटरफेस का उपयोग करता है, जबकि दूसरा वैरिएडिक प्रकारों के साथ एकल इंटरफ़ेस का उपयोग करके अधिक लचीला दृष्टिकोण अपनाता है। हम इन दोनों कार्यान्वयनों के बीच अंतर का विश्लेषण करेंगे और अधिक अनुकूलित दृष्टिकोण के फायदों पर चर्चा करेंगे।
पहले कार्यान्वयन में, मैंने अलग-अलग संख्या में तर्कों के साथ किए गए कार्यों को संभालने के लिए इंटरफेस की एक श्रृंखला को परिभाषित किया। प्रत्येक इंटरफ़ेस विशिष्ट संख्या में तर्कों के साथ एक फ़ंक्शन से मेल खाता है:
interface CurryFunction1{ (arg1: T1): R; } interface CurryFunction2 { (arg1: T1): CurryFunction1 ; } interface CurryFunction3 { (arg1: T1): CurryFunction2 ; } interface CurryFunction4 { (arg1: T1): CurryFunction3 ; } interface CurryFunction5 { (arg1: T1): CurryFunction4 ; } interface CurryFunction6 { (arg1: T1): CurryFunction5 ; }
करी फ़ंक्शन को छह तर्कों के साथ करी फ़ंक्शन में इन इंटरफ़ेस का उपयोग करने के लिए परिभाषित किया गया है:
function curry(fn: (arg1: T1, arg2: T2) => R): CurryFunction2 ; function curry (fn: (arg1: T1, arg2: T2, arg3: T3) => R): CurryFunction3 ; function curry (fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R): CurryFunction4 ; function curry (fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => R): CurryFunction5 ; function curry (fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => R): CurryFunction6 ; function curry(fn: Function) { return function curried(...args: any[]) { if (args.length >= fn.length) { return fn(...args); } else { return (...args2: any[]) => curried(...args, ...args2); } }; }
इस फ़ंक्शन का परीक्षण यह सुनिश्चित करने के लिए किया जाता है कि यह विभिन्न संख्या में तर्कों के साथ सही ढंग से काम करता है:
function testCurry() { const add = (a: number, b: number) => a b; const curriedAdd = curry(add); assert(curriedAdd(1)(2) === 3, 'Test curry function with 2 arguments'); const add3Args = (a: number, b: number, c: number) => a b c; const curriedAdd3Args = curry(add3Args); assert(curriedAdd3Args(1)(2)(3) === 6, 'Test curry function with 3 arguments'); }
हालाँकि यह कार्यान्वयन टाइपस्क्रिप्ट के लिए स्पष्ट और विशिष्ट है, लेकिन इसकी कुछ सीमाएँ हैं। विशेष रूप से, इसमें तर्कों की प्रत्येक संभावित संख्या के लिए कई इंटरफेस की परिभाषा की आवश्यकता होती है, जिससे कोड अनावश्यक हो जाता है और इसे बनाए रखना कठिन हो जाता है। इसके अतिरिक्त, छह से अधिक तर्कों को संभालने के लिए अधिक इंटरफेस जोड़ने, जटिलता बढ़ाने की आवश्यकता होगी।
करी फ़ंक्शन को अनुकूलित करने के लिए, मैंने विविध प्रकारों के साथ एकल सामान्य इंटरफ़ेस का उपयोग करके अधिक गतिशील दृष्टिकोण अपनाया। यह दृष्टिकोण प्रत्येक मामले के लिए एक अलग इंटरफ़ेस को परिभाषित करने की आवश्यकता के बिना तर्कों की मनमानी संख्या को संभालने की अनुमति देता है।
इस अनुकूलित संस्करण में, करी फ़ंक्शन को एकल सामान्य इंटरफ़ेस का उपयोग करके कार्यान्वित किया जाता है जो तर्कों की मनमानी संख्या को संभालने के लिए टाइपस्क्रिप्ट के विविध प्रकारों का लाभ उठाता है:
type CurryFunction= T extends [infer A, ...infer Rest] ? (arg: A) => CurryFunction : R; function curry (fn: (...args: T) => R): CurryFunction { return function curried(...args: unknown[]): unknown { if (args.length >= fn.length) { return fn(...args as T); } else { return (...args2: unknown[]) => curried(...([...args, ...args2] as unknown[])); } } as CurryFunction ; }
कम जटिलता: एकल सामान्य इंटरफ़ेस करीफ़ंक्शन का उपयोग करके, यह कार्यान्वयन हर संभव संख्या में तर्कों के लिए कई इंटरफ़ेस बनाने की आवश्यकता को समाप्त करता है। इससे कोड अधिक संक्षिप्त और बनाए रखना आसान हो जाता है।
तर्कों की मनमानी संख्या के लिए समर्थन: विविध प्रकारों का लाभ उठाने से यह फ़ंक्शन कार्यान्वयन को संशोधित किए बिना किसी भी संख्या में तर्कों के साथ कार्य करने की अनुमति देता है। इस प्रकार फ़ंक्शन अधिक लचीला और विभिन्न परिदृश्यों के अनुकूल है।
बेहतर टाइपिंग: डायनामिक टाइपिंग टाइपस्क्रिप्ट को तर्क प्रकारों का सटीक अनुमान लगाने की अनुमति देती है, विकास के दौरान मजबूत प्रकार की जांच प्रदान करती है, त्रुटियों के जोखिम को कम करती है, और कोड पूर्णता में सुधार करती है।
करी फ़ंक्शन के इस संस्करण का परीक्षण यह सुनिश्चित करने के लिए भी किया जाता है कि यह सही ढंग से काम करता है:
function testCurry() { const add = (a: number, b: number) => a b; const curriedAdd = curry(add); assert(curriedAdd(1)(2) === 3, 'Test curry function with 2 arguments'); const add3Args = (a: number, b: number, c: number) => a b c; const curriedAdd3Args = curry(add3Args); assert(curriedAdd3Args(1)(2)(3) === 6, 'Test curry function with 3 arguments'); const add4Args = (a: number, b: number, c: number, d: number) => a b c d; const curriedAdd4Args = curry(add4Args); assert(curriedAdd4Args(1)(2)(3)(4) === 10, 'Test curry function with 4 arguments'); }
टाइपस्क्रिप्ट में करी फ़ंक्शन को अनुकूलित करना दर्शाता है कि वैरिएडिक प्रकारों को अपनाकर स्थैतिक इंटरफेस पर आधारित दृष्टिकोण को कैसे बेहतर बनाया जा सकता है। नया कार्यान्वयन न केवल कोड जटिलता को कम करता है बल्कि अधिक लचीलापन और मजबूत प्रकार की जाँच भी प्रदान करता है। यह उदाहरण स्वच्छ, अधिक मॉड्यूलर और रखरखाव योग्य कोड बनाने के लिए टाइपस्क्रिप्ट की क्षमताओं का पूरी तरह से लाभ उठाने के महत्व पर प्रकाश डालता है।
एकाधिक इंटरफेस वाली संरचना से एकल जेनेरिक इंटरफ़ेस में संक्रमण इस बात का एक बेहतरीन उदाहरण है कि कैसे उन्नत टाइपस्क्रिप्ट अवधारणाओं को समझने और लागू करने से अधिक सुरुचिपूर्ण और कुशल समाधान प्राप्त हो सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3