"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > टाइपस्क्रिप्ट करी फ़ंक्शन को अनुकूलित करना: स्टेटिक प्रकारों से वैरिएडिक प्रकारों तक

टाइपस्क्रिप्ट करी फ़ंक्शन को अनुकूलित करना: स्टेटिक प्रकारों से वैरिएडिक प्रकारों तक

2024-08-28 को प्रकाशित
ब्राउज़ करें:842

Optimizing a TypeScript Curry Function: From Static Types to Variadic Types

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

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

प्रारंभिक कार्यान्वयन: स्थैतिक प्रकारों के साथ इंटरफेस

इंटरफेस को परिभाषित करना

पहले कार्यान्वयन में, मैंने अलग-अलग संख्या में तर्कों के साथ किए गए कार्यों को संभालने के लिए इंटरफेस की एक श्रृंखला को परिभाषित किया। प्रत्येक इंटरफ़ेस विशिष्ट संख्या में तर्कों के साथ एक फ़ंक्शन से मेल खाता है:

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;
}
अनुकूलित कार्यान्वयन के लाभ
  1. कम जटिलता: एकल सामान्य इंटरफ़ेस करीफ़ंक्शन का उपयोग करके, यह कार्यान्वयन हर संभव संख्या में तर्कों के लिए कई इंटरफ़ेस बनाने की आवश्यकता को समाप्त करता है। इससे कोड अधिक संक्षिप्त और बनाए रखना आसान हो जाता है।

  2. तर्कों की मनमानी संख्या के लिए समर्थन: विविध प्रकारों का लाभ उठाने से यह फ़ंक्शन कार्यान्वयन को संशोधित किए बिना किसी भी संख्या में तर्कों के साथ कार्य करने की अनुमति देता है। इस प्रकार फ़ंक्शन अधिक लचीला और विभिन्न परिदृश्यों के अनुकूल है।

  3. बेहतर टाइपिंग: डायनामिक टाइपिंग टाइपस्क्रिप्ट को तर्क प्रकारों का सटीक अनुमान लगाने की अनुमति देती है, विकास के दौरान मजबूत प्रकार की जांच प्रदान करती है, त्रुटियों के जोखिम को कम करती है, और कोड पूर्णता में सुधार करती है।

अनुकूलित करी फ़ंक्शन का परीक्षण

करी फ़ंक्शन के इस संस्करण का परीक्षण यह सुनिश्चित करने के लिए भी किया जाता है कि यह सही ढंग से काम करता है:

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');
}

टाइपस्क्रिप्ट में करी फ़ंक्शन को अनुकूलित करना दर्शाता है कि वैरिएडिक प्रकारों को अपनाकर स्थैतिक इंटरफेस पर आधारित दृष्टिकोण को कैसे बेहतर बनाया जा सकता है। नया कार्यान्वयन न केवल कोड जटिलता को कम करता है बल्कि अधिक लचीलापन और मजबूत प्रकार की जाँच भी प्रदान करता है। यह उदाहरण स्वच्छ, अधिक मॉड्यूलर और रखरखाव योग्य कोड बनाने के लिए टाइपस्क्रिप्ट की क्षमताओं का पूरी तरह से लाभ उठाने के महत्व पर प्रकाश डालता है।

एकाधिक इंटरफेस वाली संरचना से एकल जेनेरिक इंटरफ़ेस में संक्रमण इस बात का एक बेहतरीन उदाहरण है कि कैसे उन्नत टाइपस्क्रिप्ट अवधारणाओं को समझने और लागू करने से अधिक सुरुचिपूर्ण और कुशल समाधान प्राप्त हो सकते हैं।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/francescoagati/optimization-a-typescript-curry-function-from-static-types-to-variadic-types-2ma0?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग से संपर्क करें @163.com हटाएं
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3