सी और कुछ समान भाषाओं में, समानता के लिए बूलियन अभिव्यक्तियों की तुलना करना false
या true
एक खतरनाक आदत है।
सी में किसी भी स्केलर एक्सप्रेशन (न्यूमेरिक या पॉइंटर) का उपयोग बूलियन संदर्भ में किया जा सकता है, उदाहरण के लिए if
स्टेटमेंट की स्थिति के रूप में । सी नियम यह है कि if (cond)
बराबर है if (cond != 0)
- अर्थात, शून्य गलत है, और कोई भी गैर-शून्य मान सत्य है। यदि cond
पॉइंटर प्रकार का है, 0
एक अशक्त पॉइंटर स्थिरांक के रूप में माना जाता है; if (ptr)
का मतलब है if (ptr != NULL)
।
इस का मतलब है कि
if (cond)
तथा
if (cond == true)
एक ही बात का मतलब नहीं है । cond
गैर-शून्य होने पर पहला सच है; दूसरा तभी सही है जब वह बराबर हो true
, जो C में (यदि आपके पास है #include <stdbool.h>
) बस है 1
।
उदाहरण के लिए, isdigit()
फ़ंक्शन <ctype.h>
रिटर्न में एक int
मूल्य घोषित करता है , 0
यदि तर्क एक अंक है, तो गैर-शून्य यदि यह नहीं है। यह 42
इंगित करने के लिए वापस आ सकता है कि स्थिति सच है। तुलना 42 == true
करना विफल हो जाएगा।
ऐसा होता है कि 0
एक ही मूल्य को गलत माना जाता है, इसलिए समानता के लिए तुलना false
करना काम करेगा; if (!cond)
और if (cond == false)
वही काम करो। लेकिन अगर आप इसका फायदा उठाने जा रहे हैं, तो आपको याद रखना होगा कि तुलना करना false
ठीक है, और तुलना करना ठीक true
नहीं है। अभी तक की तुलना में, सबसे अधिक समयtrue
काम करेगा (उदाहरण के लिए, समानता और संबंधपरक ऑपरेटर हमेशा या तो उपज देते हैं )। इसका मतलब यह है कि आपके द्वारा उपयोग किए जाने वाले किसी भी कीड़े को अभी भी नीचे ट्रैक करना मुश्किल हो सकता है। (चिंता न करें, जैसे ही आप किसी महत्वपूर्ण ग्राहक को कोड प्रदर्शित करेंगे, वे दिखाई देंगे।)0
1
सी ++ में थोड़ा अलग नियम हैं; उदाहरण के लिए, इसका bool
प्रकार भाषा में थोड़ा अधिक कसकर एकीकृत है, और टाइप करने के लिए if (cond)
कनवर्ट करता cond
है bool
। लेकिन प्रभाव (ज्यादातर) एक ही है।
कुछ अन्य भाषाओं एक क्या बेहतर व्यवहार किया बूलियन्स, ऐसी है कि कॉल कर सकते है cond == true
और cond == false
(या जो भी वाक्य रचना होने के लिए होता है) सुरक्षित है। फिर भी, मैंने जो भी भाषा देखी है उसमें एक not
या एक !
ऑपरेटर है; यह वहां है, इसलिए आप इसका उपयोग कर सकते हैं। का उपयोग cond == false
करने के बजाय !cond
या not cond
नहीं, मेरी राय में, पठनीयता में सुधार करता है। (यह सच है कि !
चरित्र को एक नज़र में देखना मुश्किल हो सकता है; मैं इससे !
बचने के लिए कभी-कभी एक स्थान जोड़ देता हूं ।)
और अक्सर आप इस मुद्दे से बच सकते हैं और कोड को फिर से व्यवस्थित करके स्पष्टता में सुधार कर सकते हैं। उदाहरण के लिए, इसके बजाय:
if (!cond) {
do_this();
}
else {
do_that();
}
आप लिख सकते हैं:
if (cond) {
do_that();
}
else {
do_this();
}
यह हमेशा बेहतर नहीं होता है, लेकिन यह उन अवसरों की तलाश में चोट नहीं करता है जहां यह है।
सारांश: सी और सी ++ में, समानता की तुलना true
और false
खतरनाक, अत्यधिक क्रिया और खराब शैली से की जाती है। कई अन्य भाषाओं में, इस तरह की तुलना खतरनाक नहीं हो सकती है, लेकिन वे अभी भी बहुत खराब और खराब शैली के हैं।