मैं थोड़ा चरम हो सकता हूं, लेकिन मुझे रक्षात्मक प्रोग्रामिंग पसंद नहीं है, मुझे लगता है कि यह आलस्य है जिसने सिद्धांत पेश किया है।
इस विशेष उदाहरण के लिए, यह कहने में कोई समझ नहीं है कि सूचक शून्य नहीं है। यदि आप एक शून्य सूचक चाहते हैं, तो इसके बजाय संदर्भ का उपयोग करने के बजाय वास्तव में इसे लागू करने के लिए कोई बेहतर तरीका नहीं है (और इसे एक ही समय में स्पष्ट रूप से दस्तावेज करें)। और यह प्रलेखन है जो वास्तव में संकलक द्वारा लागू किया जाएगा और रनटाइम पर ज़िल्टच की लागत नहीं है !!
आम तौर पर, मैं सीधे 'कच्चे' प्रकार का उपयोग नहीं करता हूं। के उदाहरण देकर स्पष्ट करते हैं:
void myFunction(std::string const& foo, std::string const& bar);
foo
और bar
के संभावित मूल्य क्या हैं? वैसे यह केवल इतना ही सीमित है कि std::string
में क्या हो सकता है ... जो बहुत अस्पष्ट है।
दूसरी ओर:
void myFunction(Foo const& foo, Bar const& bar);
ज्यादा बेहतर है!
- अगर लोगों को गलती से बहस के क्रम को उल्टा, यह संकलक
- प्रत्येक वर्ग ने पता लगाया है कि जाँच के मूल्य सही है के लिए पूरी तरह जिम्मेदार है, उन burdenned नहीं कर रहे हैं।
मेरे पास मजबूत टाइपिंग का पक्ष लेने की प्रवृत्ति है। अगर मेरे पास एक प्रविष्टि है जो केवल वर्णमाला वर्णों से बनी होनी चाहिए और 12 वर्ण तक होनी चाहिए, तो मैं std::string
को एक छोटे से वर्ग को लपेटना चाहूंगा, जिसमें सरल validate
विधि असाइनमेंट की जांच करने के लिए आंतरिक रूप से उपयोग की जाती है, और इसके बजाय उस कक्षा को पास करें । इस तरह से मुझे पता है कि यदि मैं एक बार प्रमाणीकरण दिनचर्या का परीक्षण करता हूं, तो मुझे वास्तव में उन सभी पथों के बारे में चिंता करने की ज़रूरत नहीं है, जिनके माध्यम से वह मूल्य मुझे प्राप्त हो सकता है> यह मेरे पहुंचने पर मान्य होगा।
बेशक, यह नहीं है कि कोड का परीक्षण नहीं किया जाना चाहिए। यह सिर्फ इतना है कि मैं मजबूत encapsulation का पक्ष लेता हूं, और इनपुट की मान्यता मेरी राय में ज्ञान encapsulation का हिस्सा है।
और कोई नियम अपवाद के बिना नहीं आ सकता है ... खुला इंटरफ़ेस आवश्यक रूप से सत्यापन कोड के साथ फूला हुआ है, क्योंकि आप कभी नहीं जानते कि आपके ऊपर क्या हो सकता है। हालांकि आपके बीओएम में स्वयं-मान्य वस्तुओं के साथ यह सामान्य रूप से काफी पारदर्शी है।
स्रोत
2009-12-16 20:01:19
http://stackoverflow.com/questions/6847/defensive- प्रोग्रामिंग के कई अन्य लोगों के बीच। –
इस प्रकार का सवाल हमेशा मुझे श्री हेइजेनबर्ग (http://en.wikipedia.org/wiki/Werner_Heisenberg) के बारे में सोचता है। – jldupont
रक्षात्मक प्रोग्रामिंग केवल पर्याप्त लक्षण नहीं है या सही यूनिट परीक्षण नहीं है, एर्लांग जैसे लैंगुग वास्तव में रक्षात्मक प्रोग्रामिंग को हतोत्साहित करते हैं क्योंकि यह बड़ी समस्याओं को मुखौटा करता है, और मैं इससे सहमत हूं। –