सुरक्षा रिसाव होने वाले कोड के बारे में आपका तर्क आपके द्वारा उपयोग की जा रही भाषा के आधार पर सही हो सकता है या नहीं भी हो सकता है । सी कोड में यह एक समस्या हो सकती है (विशेष रूप से क्योंकि सी में एक बूलियन सिर्फ एक ऐसा उदाहरण है जो गैर-शून्य या शून्य है) - लेकिन सबसे दृढ़ता से टाइप की गई भाषाओं में (यानी रनटाइम प्रकार की जाँच) यदि passwordCheck
चर बूलियन के रूप में घोषित किया गया था, इसके लिए कुछ और असाइन करने का कोई तरीका नहीं है। वास्तव में, एक if
विधेय में सब कुछ एक बूलियन को हल करना चाहिए, चाहे आप बूलियन ऑपरेटरों का उपयोग करें या बस मूल्य का उपयोग करें। यदि आप passwordCheck
रनटाइम से बंधी हुई किसी अन्य प्रकार की ऑब्जेक्ट को प्रबंधित करने में कामयाब होते हैं तो कुछ प्रकार के अवैध कास्ट अपवाद को फेंक देंगे।
अगर कोई निर्माण करता है, तो सरल / अगर अन्य निर्माणों को पढ़ने में बहुत आसान है, अगर / अगर निर्माण करता है - और कम अनजाने समस्याओं का खतरा है। चलो एक दूसरे के लिए एक ही उदाहरण लेते हैं:
if(passwordCheck == false) {
denyAccess();
}
if(passwordCheck) {
letThemIn();
}
परस्पर अनन्य उपवाक्य का अर्थ जिसे आप ऊपर निष्पादित करना चाहते हैं वह खो गया है। यह है कि क्या / अन्यथा निर्माण बता देते हैं। निष्पादन की दो परस्पर अनन्य शाखाएँ, जहाँ उनमें से एक हमेशा चलेगी। यह सुरक्षा का एक महत्वपूर्ण हिस्सा है - यह सुनिश्चित करना कि letThemIn
आपके बुलाए जाने के बाद कोई रास्ता नहीं है denyAccess
।
कोड स्पष्टता के उद्देश्य के लिए, और यह सुनिश्चित करने के लिए कि महत्वपूर्ण खंड सबसे अधिक संरक्षित हैं, उन्हें प्राथमिक खंड ( if
भाग) के अंदर होना चाहिए । डिफ़ॉल्ट गैर-अनुरूप व्यवहार वैकल्पिक खंड ( else
भाग) में होना चाहिए । उदाहरण के लिए:
if(passwordCheck) {
letThemIn();
} else {
denyAccess();
}
नोट: विभिन्न भाषाओं के साथ काम करने में, मैंने एक कोडिंग हब विकसित किया है जो "अगर यह एक स्ट्रिंग है तो" के सवाल से बचने में मदद करता है? अनिवार्य रूप से, यह निरंतर पहले बूलियन अभिव्यक्ति में रखना है। उदाहरण के लिए, जाँच के बजाय passwordCheck == false
मैं जाँच कर रहा हूँ false == passwordCheck
। यह C ++ में आकस्मिक असाइनमेंट समस्या से भी बचता है। इस दृष्टिकोण का उपयोग करते हुए, कंपाइलर शिकायत करेगा यदि मैं =
इसके बजाय टाइप करता हूं ==
। जावा और C # जैसी भाषाओं में, कंपाइलर असाइनमेंट को क्लॉज में त्रुटि मान लेगा, लेकिन C ++ इसे खुशी-खुशी स्वीकार कर लेगा। यही कारण है कि मैं भी null
पहले के साथ शून्य जाँच करने के लिए करते हैं ।
यदि आप नियमित रूप से स्थिरांक को परिवर्तित करने वाली भाषाओं को बदलते हैं तो यह बहुत उपयोगी है। हालांकि, मेरी टीम पर यह कोडिंग मानक के विपरीत है और कंपाइलर वैसे भी उन समस्याओं को पकड़ता है। इसे तोड़ने के लिए एक कठिन हैबिट हो सकती है।