2013-04-14 12 views
7

आप कॉलबैक फ़ंक्शन का उपयोग कब करते हैं? मुझे पता है कि वे कैसे काम करते हैं, मैंने उन्हें उपयोग में देखा है और मैंने उन्हें कई बार इस्तेमाल किया है।कॉलबैक फ़ंक्शन का उपयोग कब करें?

सी दुनिया का एक उदाहरण libcurl होगा जो इसके डेटा पुनर्प्राप्ति के लिए कॉलबैक पर निर्भर करता है।

एक विरोध उदाहरण OpenSSL होगा:

ret = somefunc(&target_value); 
if(ret != 0) 
    //error case 

मैं जब जो उपयोग करने के लिए सोच रहा हूँ: मैं कहां से यह प्रयोग किया जाता है, मैं पैरामीटर का उपयोग करें? क्या कॉलबैक केवल एसिंक सामग्री के लिए उपयोगी है? मैं वर्तमान में अपने एप्लिकेशन के एपीआई को डिजाइन करने की प्रक्रिया में हूं और मैं सोच रहा हूं कि कॉलबैक या सिर्फ आउट पैरामीटर का उपयोग करना है या नहीं। हुड के तहत यह libcurl और OpenSSL का उपयोग मुख्य पुस्तकालयों के रूप में करेगा जो इसे बनाता है और पैरामीटर "लौटा" एक ओपनएसएसएल डेटा प्रकार है।

मुझे लौटने पर कॉलबैक का कोई लाभ नहीं दिख रहा है। क्या यह केवल उपयोगी है, अगर मैं इसे वापस देने के बजाय किसी भी तरीके से डेटा को संसाधित करना चाहता हूं? लेकिन फिर मैं लौटा डेटा संसाधित कर सकता था। अंतर कहाँ है?

उत्तर

4

सबसे सरल मामले में, दोनों दृष्टिकोण समकक्ष हैं। लेकिन यदि कॉलबैक डेटा को संसाधित करने के लिए एकाधिक बार कहा जा सकता है, तो कॉलबैक दृष्टिकोण अधिक लचीलापन प्रदान करता है।

libcurl एक अच्छा उदाहरण है: यह एक एपीआई प्रदान करता है जो सभी नए आगमन डेटा के लिए कॉलबैक निर्दिष्ट करने की अनुमति देता है। विकल्प, जैसा कि आप इसे प्रस्तुत करते हैं, केवल डेटा वापस कर देगा। लेकिन इसे वापस करें - कैसे? यदि डेटा मेमोरी बफर में जोड़ा गया है, तो यह बहुत बड़ा हो सकता है, और कॉलर शायद इसे फ़ाइल में सहेजना चाहता था। यदि डेटा को कॉलर पर वापस लौटाई गई फ़ाइल में सहेजा जाता है, तो अगर कॉलर वास्तव में इसे स्मृति में संग्रहीत करना चाहता है तो उसे अनावश्यक I/O लग सकता है। या तो दृष्टिकोण गलत है अगर कॉलर केवल चेकसम की गणना करना चाहता था, और डेटा को स्टोर करने की आवश्यकता नहीं थी।

कॉलबैक दृष्टिकोण कॉलर को यह तय करने की अनुमति देता है कि डेटा के मूल भाग को बड़े पैमाने पर कैसे इकट्ठा किया जाएगा।

0

यदि मूल्य तुरंत वापस किया जा सकता है तो हाँ, कॉलबैक की कोई आवश्यकता नहीं है। जैसा कि आपने अनुमान लगाया है, कॉलबैक उन स्थितियों में उपयोगी हैं जिनमें किसी भी कारण से तुरंत वापस नहीं किया जा सकता है (शायद यह केवल एक लंबा चल रहा ऑपरेशन है जो बेहतर ढंग से निष्पादित किया जाता है)।

3

कॉलबैक असीमित अधिसूचना के लिए उपयोगी हैं। जब आप कुछ एपीआई के साथ कॉलबैक पंजीकृत करते हैं, तो आप उम्मीद कर रहे हैं कि कुछ घटना होने पर कॉलबैक चलाने के लिए। एक ही नस के साथ, आप उन्हें डेटा प्रोसेसिंग पाइपलाइन में एक मध्यवर्ती चरण के रूप में उपयोग कर सकते हैं (यदि आप ऑडियो/रिकॉर्डिंग उद्योग से परिचित हैं तो 'सम्मिलित करें' के समान)। - क्या आप के रूप में उपयोग

  1. जब डेटा आता है या कुछ घटना होती है मैं आपको बता देगा:

    तो, संक्षेप में, इन दो मुख्य मानदंड है कि मैं के लिए सामना करना पड़ा और/या लागू किया कॉलबैक योजनाओं हैं उचित समझना।

  2. मैं इससे निपटने से पहले कुछ डेटा संशोधित करने का मौका दूंगा।
संबंधित मुद्दे