2017-08-14 16 views
5

एक लेख मैं पढ़ रहा था (जावास्क्रिप्ट में) एक अशुद्ध समारोह का एक उदाहरण के रूप में इस देता है:क्या शुद्ध कार्य बाहरी स्थिरता पर निर्भर करता है?

const tipPercentage = 0.15; 

const calculateTip = cost => cost * tipPercentage; 

जो मुझे एक अजीब उदाहरण का एक सा के रूप में गिरा था, tipPercentage के बाद से एक अपरिवर्तनीय मूल्य के साथ एक स्थिर है। शुद्ध कार्यों के सामान्य उदाहरण अपरिवर्तनीय स्थिरांक पर निर्भरता की अनुमति देते हैं जब उन स्थिरांक कार्य होते हैं।

const mul = (x, y) => x * y 

const calculateTip = (cost, tipPercentage) => mul(cost, tipPercentage); 

उपरोक्त उदाहरण में, मुझे ठीक कर लें मैं गलत हूँ, calculateTip आम तौर पर एक शुद्ध समारोह के रूप में वर्गीकृत किया जाएगा।

तो, मेरा प्रश्न है: कार्यात्मक प्रोग्रामिंग में, एक फ़ंक्शन अभी भी शुद्ध माना जाता है यदि यह एक अपरिवर्तनीय मान के साथ बाहरी रूप से परिभाषित स्थिरता पर निर्भर करता है, जब वह मान कोई फ़ंक्शन नहीं होता है?

+0

यह है - "बाहरी दायरे" से कब्जे वाले चर पर निर्भर करता है कि "2 से अधिक तर्क स्वीकार करता है" हर दूसरे फ़ंक्शन हैकेल में है। – zerkms

+0

हां बिल्कुल। अपरिवर्तनीय कार्यों के आधार पर अपरिवर्तनीय मूल्यों के आधार पर केवल एक विशेष मामला है। – Bergi

+0

यदि यह शुद्ध नहीं था, गणित तोड़ दिया जाएगा। – molbdnilo

उत्तर

4

हां, यह एक शुद्ध कार्य है। शुद्ध कार्य referentially transparent हैं, यानी कोई भी प्रोग्राम के व्यवहार को बदले बिना फ़ंक्शन कॉल को इसके परिणाम के साथ प्रतिस्थापित कर सकता है।

आपके उदाहरण में, यह हमेशा प्रतिस्थापित करने के लिए मान्य है उदा। calculateTip (100) व्यवहार में किसी भी बदलाव के बिना 15 के परिणामस्वरूप आपके प्रोग्राम में कहीं भी, इसलिए कार्य शुद्ध है।

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