मैं अपने कार्यों को और अधिक पुन: प्रयोज्य बनाना चाहता हूं, लेकिन मुझे नहीं पता कि कैसे (और आपके मार्गदर्शन के लिए पूछें)।

कहो मेरे पास ऐसा कुछ है:

function One() {
  // code...
  // lot's of code...
  const doSomething = magic.sayWhat(); // or anything else
  // other code...
  // lot's of other code...
  return something;
}

function Two() {
  // code...
  // lot's of code...
  const doSomething = magic.sayWho(); // Here is a change. This change can be a bit more than that, but it's a fraction compared to all the rest of the code in function. It's the same as in function `One` except this piece of code.
  // other code...
  // lot's of other code...
  return something;
}

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

अपडेट करें:

मैं वास्तव में जो कर रहा हूं उसकी नकल प्रदान करने की पूरी कोशिश की:

function myLameAssFunction(someArg1, someArg2) {
  let gettingSomethingFromService1 = callService1(someArg1);
  let gettingSomethingFromService2 = callService2(someArg1);

  // code, code, code...

  unextractableFunction(() => {
    let somethingFromExternalLibrary = magicLibrary.do.magic();
  
    const doSomething = async () => {
      try {
        const someData = await magicLibrary.sayWhat(someArg2, gettingSomethingFromService1, somethingFromExternalLibrary);
        gettingSomethingFromService2(someData);
      } catch(err) {
        // whatever
      }
    }
  });

  // code, code, code...
  
  return gettingSomethingFromService2;
}

केवल एक हिस्सा जिसे बदलने की जरूरत है, वह है जिस तरह से मैं कॉल/प्राप्त करता हूं someData

0
goyat 17 फरवरी 2021, 12:01

1 उत्तर

सबसे बढ़िया उत्तर

मूल रूप से, आप फ़ंक्शन को पैरामीटर कर सकते हैं ताकि आप कुछ ऐसा कर सकें जो थोड़ा अलग हो, या आप पहले और दूसरे बिट्स को उन कार्यों में सार कर सकें जिनका आप पुन: उपयोग करते हैं।

पैरामीटरिंग:

function unified(operation) {
    // code...
    // lots of code...
    const doSomething = operation(); // ***
    // other code...
    // lots of other code...
    return something;
}

function One() {
    return unified(() => magic.sayWhat());
}

function Two() {
    return unified(() => magic.sayWho());
}

सार:

function theFirstBit() {
    // code...
    // lots of code...
}

function theSecondBit() {
    // other code...
    // lots of other code...
}

function One() {
    theFirstBit();
    const doSomething = magic.sayWhat();
    theSecondBit();
    return something; // This might have come from one of the bits above
}

function Two() {
    theFirstBit();
    const doSomething = magic.sayWho();
    theSecondBit();
    return something; // This might have come from one of the bits above
}

अपना संपादन पुनः करें:

एकमात्र हिस्सा जिसे बदलने की जरूरत है, वह है जिस तरह से मैं कॉल/प्राप्त करता हूं someData

यह पैरामीटरिंग के लिए उपयोग का मामला है:

function myLameAssFunction(someArg1, someArg2, getSomeData) {
// *** −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
  let gettingSomethingFromService1 = callService1(someArg1);
  let gettingSomethingFromService2 = callService2(someArg1);

  // code, code, code...

  unextractableFunction(() => {
    let somethingFromExternalLibrary = magicLibrary.do.magic();
  
    const doSomething = async () => {
      try {
        const someData = await getSomeData();
// *** −−−−−−−−−−−−−−−−−−−−−−−−^
        gettingSomethingFromService2(someData);
      } catch(err) {
        // whatever
      }
    }
  });

  // code, code, code...
  
  return gettingSomethingFromService2;
}
0
T.J. Crowder 17 फरवरी 2021, 12:49
धन्यवाद टी.जे., लेकिन आप (abstracting उदाहरण में) कोड के कुछ टुकड़ों के बारे में बात कर रहे हैं जिन्हें अलग/निकाला जा सकता है, कहने के लिए उनका अपना तर्क है। मैं नहीं। उपरोक्त उस फ़ंक्शन का पूरा कोड अत्यधिक जुड़ा हुआ है, और पूरी तरह से मेरे अपने कोड के साथ नहीं है
 – 
goyat
17 फरवरी 2021, 12:15
- फिर पैरामीटरिंग की तरह लगता है। अधिक प्रतिनिधि उदाहरण के बिना अधिक विशिष्ट होना कठिन होगा।
 – 
T.J. Crowder
17 फरवरी 2021, 12:19
मैंने अपनी पोस्ट को अपडेट कर दिया है, ठीक उसी चीज़ की नकल करने की कोशिश की है जो मैं करने की कोशिश कर रहा हूं, लेकिन मैं बारीकियों में नहीं जा सकता: \
 – 
goyat
17 फरवरी 2021, 12:44
- यह पैरामीटरिंग का एक सीधा मामला है।
 – 
T.J. Crowder
17 फरवरी 2021, 12:49