2013-03-14 2 views
14

प्रलेखनक्या angular.identity() के लिए उपयोग मामलों का कोई अच्छा उदाहरण है? एक कोणीय अनुप्रयोग में कार्यात्मक शैली में कोड लिखने -

A function that returns its first argument. This function is useful when writing code in the functional style. 

के अनुसार मैं जहाँ मैं इस तरह के उपयोग के मामले का एक अच्छा उदाहरण मिल सकता है सोच रहा हूँ। धन्यवाद AngularJS स्रोत कोड से

उत्तर

15

उदाहरण:

function transformer(transformationFn, value) { 
    return (transformationFn || angular.identity)(value); 
}; 

स्पष्टीकरण:

मामले transformationFn में पहले पैरामीटर के रूप प्रदान की जाती है, यह value साथ बुलाया जाएगा के रूप में यह खुद पैरामीटर है। अन्यथा identity फ़ंक्शन को उसी मान के साथ बुलाया जाएगा।

के रूप में एनजी स्रोत कोड का उल्लेख है:

इस समारोह उपयोगी होता है जब कार्यात्मक शैली में कोड लिखने।

इसका मतलब क्या है कि कार्यात्मक प्रोग्रामिंग में वहाँ, कोई वैश्विक हैं ताकि आप हमेशा से पारित/सब कुछ आप की जरूरत है इंजेक्षन करने के लिए है है।

+2

मैं समझ में नहीं आया कि क्यों हम 'angular.identity()' फ़ंक्शन को कॉल (जब transformationFn अपरिभाषित है) और क्या यह बुला पर करता है। – mia

+2

इसका मूल रूप से एक डिफ़ॉल्ट कार्यान्वयन के रूप में उपयोग किया जाता है - जब कोई परिवर्तन फ़ंक्शन प्रदान नहीं किया जाता है, तो बस पहचान (यानी कोई परिवर्तन नहीं) पर वापस आ जाता है। –

9

चलें कहते हैं कि हम इन दोनों नीचे कार्यों:

$scope.square = function(n) { 
return n * n 
}; 


$scope.multplybyTwo = function(n) { 
return n * 2 
}; 

एक कार्यात्मक तरीके से इस कॉल करने के लिए:

$scope.givemeResult = function(fn, val) { 
return (fn || angular.identity)(val); 
}; 

तो आप नीचे दिए गए की तरह ऊपर समारोह कुछ का उपयोग हो सकता है:

$scope.initVal = 5; 
$scope.squareResult = $scope.givemeResult($scope.square, $scope.initVal); 
$scope.intoTwo = $scope.givemeResult($scope.multplybyTwo, $scope.initVal); 

012:

आप नीचे दिए गए लिंक का अनुसरण कर सकते

http://litutech.blogspot.in/2014/02/angularidentity-example.html

+3

स्टैक एक्सचेंज में आपका स्वागत है। यह एक [प्रश्न और उत्तर साइट] है (http://stackoverflow.com/about), लिंक संग्रह नहीं। कृपया अपने उत्तर में प्रासंगिक सामग्री शामिल करें, न केवल सामग्री के लिए एक लिंक। संदर्भ संदर्भ के लिए या आगे की जानकारी के लिए लिंक अच्छा है। अधिक युक्तियों के लिए, देखें [कैसे जवाब दें] (http://stackoverflow.com/questions/how-to-answer)। –

7

मुझे सही अगर मैं गलत हूँ, लेकिन मैं समझता हूँ कि इस

function transformer(transformationFn, value) { 
    return (transformationFn || angular.identity)(value); 
}; 

हो सकता है "गैर-पुनर्संशोधित" इस

function transformer(transformationFn, value) { 
    if (transformationFn) { 
    return transformationFn(value); 
    } else { 
    return angular.identity(value); 
    } 
}; 

को जो कार्यात्मक के बराबर होगा है यह identity-रहित संस्करण:

function transformer(transformationFn, value) { 
    if (transformationFn) { 
    return transformationFn(value); 
    } else { 
    return value; 
    } 
}; 

तो मुझे लगता है कि उपयोग का मामला तब होगा जब आप किसी मूल्य के लिए एक निश्चित परिवर्तन लागू करना चाहते हैं, जब आपको ऐसी चीज़ के साथ आपूर्ति की जाती है जो वास्तव में मौजूद हो या न हो।

मैं बेहतर, identity समारोह (मैं यह समझ के रूप में) की व्याख्या करने हालांकि मैं अपने जवाब की समीक्षा के रूप में मुझे नहीं लगता कि मैं वास्तव में अपने प्रश्न का उत्तर चाहता था। अगर यह सहायक हो तो भी मेरा जवाब यहां छोड़ दें।

+0

क्या कोणीय की स्पष्टता स्पष्ट रूप से करता है। धन्यवाद! – Michiel

4

angular.identity मामलों में जहां आप इसे एक माता पिता से अपने बच्चों को पास करके एक वस्तु एक माता पिता के लिए बाध्य संदर्भ लेना चाहते हैं के लिए उपयोगी है।

एक पहचान समारोह कार्यों के लिए शून्य की तरह है। अपने आप में बेकार की तरह है, लेकिन उच्च क्रम काम करता है, जहां एक पैरामीटर के रूप में एक समारोह लेने के लिए या एक परिणाम के रूप में यह लौट सकते हैं का उपयोग कर एक अभिव्यक्ति के हिस्से के रूप में कभी-कभी उपयोगी।

उदाहरण के लिए, आप एक प्रारंभिक चयन करने के लिए एक दो आयामी सरणी के लिए बाध्य कर सकते हैं, और फिर प्रत्येक subselection को निहित भीतरी सरणियों बाँध:

यहाँ सरणी मूल्यों के लिए एक उदाहरण है। इस मामले में मूल्यों समारोह पहचान समारोह है: यह, बच्चे तत्वों के प्रत्येक समूह के लिए शुरू हो जाती है डेटा पेरेंट तत्व के लिए बाध्य कर पारित किया जा रहा है, और डेटा की इस सरणी देता है।

इसका इस्तेमाल जब यह करने के लिए एक डमी समारोह पारित करने के लिए आवश्यक है:

  • एक वादा ($ क्यू)
  • एक संकलक ($ संकलन)
  • एक इकाई परीक्षण (जासूस/नकली)

जो एक पाइप के लिए कोई डेटा स्रोत या पंप के रूप में कार्य | फिल्टर।

तुलना करके, Angular.noop गलत तरीके से हल करने/वादों को सही ढंग से खारिज क्योंकि यह हमेशा अनिर्धारित दिखाता है, जबकि Angular.identity सही तरीके से समाधान हैंडल/खारिज वादों क्योंकि यह हमेशा तर्क यह (f(x) = x) के लिए पारित रिटर्न संभालती है।

कोणीय में कंस्ट्रक्टर्स के संदर्भ में, यह इस तरह के रूप में प्रासंगिक है:

जावास्क्रिप्ट इंजन केवल एक निर्माता के कहने लौट अगर निर्माता स्पष्ट रूप से (यानी प्रकार वस्तु का एक मूल्य या किसी वस्तु वापस नहीं करता है समारोह)। इसलिए नई पहचान (मान) हमेशा एक वस्तु है। इस प्रकार नई पहचान (मान) == मूल्य ही सच्चा लौटाता है यदि मूल्य एक वस्तु है। इसका कारण यह है जावास्क्रिप्ट में समानता ऑपरेटरों हमेशा पहचान के लिए जाँच जब ऑपरेंड में से एक एक वस्तु है।

संदर्भ

संबंधित मुद्दे