मुझे पता है कि आक्रमणकारियों की अवधारणा कई प्रोग्रामिंग प्रतिमानों में मौजूद है। उदाहरण के लिए, लूप आक्रमणकारी ओओ, कार्यात्मक और प्रक्रियात्मक प्रोग्रामिंग में प्रासंगिक हैं।
हालांकि, ओओपी में पाया जाने वाला एक बहुत ही उपयोगी प्रकार एक विशेष प्रकार के डेटा का एक अपरिवर्तनीय है। यह मैं शीर्षक में "टाइप-आधारित हमलावर" कह रहा हूं। उदाहरण के लिए, एक Fractionप्रकार का एक हो सकता है numeratorऔर denominatorउनके gcd हमेशा होता है कि 1 अपरिवर्तनीय साथ, (यानी अंश एक कम रूप में है)। मैं केवल कुछ प्रकार के एनकैप्सुलेशन के द्वारा इसकी गारंटी दे सकता हूं, इसके डेटा को स्वतंत्र रूप से सेट नहीं करने देता। बदले में, मुझे कभी यह जांचने की ज़रूरत नहीं है कि क्या यह कम हो गया है, इसलिए मैं समानता जांच जैसे एल्गोरिदम को सरल बना सकता हूं।
दूसरी ओर, अगर मैं केवल एनकैप्सुलेशन के Fractionमाध्यम से इस गारंटी को प्रदान किए बिना एक प्रकार की घोषणा करता हूं, तो मैं इस प्रकार के किसी भी कार्य को सुरक्षित रूप से नहीं लिख सकता हूं, जो यह मानता है कि अंश कम हो गया है, क्योंकि भविष्य में कोई और साथ आ सकता है और एक रास्ता जोड़ सकता है गैर-कम अंश की पकड़
आम तौर पर, इस तरह के अपरिवर्तनीय की कमी के कारण हो सकता है:
- पूर्व-स्थितियों के रूप में अधिक जटिल एल्गोरिदम को कई स्थानों पर जांच / सुनिश्चित किया जाना चाहिए
- DRY उल्लंघन के रूप में इन दोहराया पूर्व स्थितियों में एक ही अंतर्निहित ज्ञान का प्रतिनिधित्व करते हैं (कि अपरिवर्तनीय सच होना चाहिए)
- संकलन-समय की गारंटी के बजाय रनटाइम विफलताओं के माध्यम से पूर्व-शर्तों को लागू करना
तो मेरा सवाल यह है कि इस तरह के अपरिवर्तनीय के लिए कार्यात्मक प्रोग्रामिंग का जवाब क्या है। क्या कमोबेश यही काम करने का एक कार्यात्मक-मुहावरेदार तरीका है? या कार्यात्मक प्रोग्रामिंग का कोई पहलू है जो लाभ को कम प्रासंगिक बनाता है?
PrimeNumberवर्ग पर विचार करें । यह प्रत्येक ऑपरेशन के लिए primality के लिए कई निरर्थक जांच करने के लिए बहुत महंगा होगा, लेकिन यह एक प्रकार का परीक्षण नहीं है जो संकलन-समय पर किया जा सकता है। (संचालन का एक बहुत आप रूढ़ अंक पर प्रदर्शन करने के लिए कहते हैं, गुणन चाहते हैं, एक नहीं बनाते बंद पोस्टिंग टिप्पणी के बाद से मैं कार्यात्मक प्रोग्रामिंग अपने आप को पता नहीं है के रूप में, यानी परिणाम शायद प्रधानमंत्री की गारंटी नहीं है