बूलियन के शून्य मान का उपयोग कब किया जाना चाहिए?


159

जावा booleanके मूल्यों की अनुमति देता है trueऔर falseजबकि बूलियन की अनुमति देता है true, falseऔर null। मैंने अपने booleans को Booleans में बदलना शुरू कर दिया है । यह परीक्षण जैसे क्रैश का कारण बन सकता है

Boolean set = null;
...
if (set) ...

परीक्षण के दौरान

if (set != null && set) ...

आकस्मिक और त्रुटि-प्रवण लगता है।

जब, यदि कभी, यह Booleanशून्य मानों के साथ उपयोग करने के लिए उपयोगी है ? यदि कभी नहीं, तो लिपटे ऑब्जेक्ट के मुख्य लाभ क्या हैं?

अद्यतन: इस तरह के बहुत सारे मूल्यवान उत्तर दिए गए हैं, जिनमें से कुछ को मैंने अपने उत्तर में संक्षेप में प्रस्तुत किया है। मैं जावा में सबसे अच्छा मध्यवर्ती हूं इसलिए मैंने उन चीजों को दिखाने की कोशिश की है जो मुझे उपयोगी लगती हैं। ध्यान दें कि प्रश्न "गलत तरीके से संचालित" है (बूलियन का "शून्य मान हो सकता है"), लेकिन मैंने इसे दूसरों के गलत धारणा के मामले में छोड़ दिया है


7
कभी-कभी, आप एक असंगठित राज्य चाहते हैं, और मदद Booleanकरने के लिए चर सेट करते हैं null
न्हठ्ठ

2
"ऑलवेज" थोड़ा मजबूत है कि मैं पुष्टि करने की हिम्मत नहीं करता, लेकिन मैं इसके लिए एक परीक्षण की उम्मीद करूंगा कि nullक्या यह वास्तव में एक 3 जी राज्य के रूप में उपयोग किया जाता है।
न्हात्थ

6
क्या आपके पास बुलियन को बुलियन में बदलने का कोई कारण है? मैं आदिम प्रकार से चिपक जाता हूं और इसे तभी लपेटता हूं जब ऐसा करने का एक अच्छा कारण हो, जैसे कि जब मुझे संदर्भ द्वारा एक चर पास करने की आवश्यकता होती है।
जेपी

7
आप इसे देखना भी चाहेंगे: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
biziclop

6
" बुलियन में अशक्त मूल्य" जैसी कोई चीज नहीं है । A Booleanएक वस्तु है, जबकि booleanएक "स्केलर" है। यदि एक Booleanसंदर्भ शून्य करने के लिए सेट किया गया है, जिसका अर्थ है कि संबंधित Booleanवस्तु मौजूद नहीं है। आप किसी ऐसी चीज़ के अंदर कुछ भी नहीं रख सकते जो मौजूद नहीं है।
हॉट लिक्स

जवाबों:


244

हर बार के booleanबजाय का उपयोग करें Boolean। यह कई NullPointerExceptionएस से बच जाएगा और आपके कोड को और अधिक मजबूत बना देगा।

Boolean उदाहरण के लिए उपयोगी है

  • संग्रह (सूची, मानचित्र, आदि) में बूलियनों को संग्रहीत करने के लिए
  • एक अशक्त बूलियन का प्रतिनिधित्व करने के लिए (उदाहरण के लिए, डेटाबेस में एक अशक्त बूलियन कॉलम से आना)। अशक्त मूल्य का मतलब हो सकता है "हमें नहीं पता कि यह सही है या गलत" इस संदर्भ में।
  • हर बार एक विधि को तर्क के रूप में एक वस्तु की आवश्यकता होती है, और आपको एक बूलियन मान पारित करने की आवश्यकता होती है। उदाहरण के लिए, जैसे प्रतिबिंब या तरीकों का उपयोग करते समय MessageFormat.format()

35
डेटाबेस में एक अशक्त मूल्य का अर्थ "FileNotFound"
कार्ल जोहान

31
आपकी दूसरी गोली वास्तव में इस प्रश्न के सही उत्तर का मूल है, मुझे लगता है।
नील्स बैगन

3
बूलियन के लिए एक और उपयोग जो मैंने किया है वह सामान्य प्रकार के पैरामीटर के रूप में है जब सामान्य कक्षाओं का विस्तार किया जाता है
एलेक्स

6
"ब्रह्मांड नहीं जानता है" के अलावा एक अर्थ के साथ नल की अवधारणा को ओवरलोड करना यह 3 (या अधिक) मूल्यवान एनम का उपयोग करने की तुलना में कमजोर है। विधि में कोड पासिंग पैरामीटर्स को अधिक स्पष्ट भी बनाता है।
ब्लूवेकर

16
या # 4: Boolean isSchrodinger‎CatAlive = null;(क्षमा करें, विरोध नहीं कर सकता;)
मैथ्यू

58

मैं लगभग कभी उपयोग नहीं करता Booleanक्योंकि इसके शब्दार्थ अस्पष्ट और अस्पष्ट हैं। मूल रूप से आपके पास 3-राज्य तर्क हैं: सही, गलत या अज्ञात। कभी-कभी इसका उपयोग करना उपयोगी होता है जैसे कि जब आपने उपयोगकर्ता को दो मानों के बीच विकल्प दिया था और उपयोगकर्ता ने बिल्कुल भी जवाब नहीं दिया था और आप वास्तव में उस जानकारी को जानना चाहते हैं (विचार करें: NULLable डेटाबेस कॉलम)।

मैं इसे अतिरिक्त मेमोरी ओवरहेड, एनपीई संभावना और कम टाइपिंग का परिचय देने के booleanलिए कोई कारण नहीं देखता Boolean। आमतौर पर मैं BooleanUtils.isTrue()अपने जीवन को थोड़ा आसान बनाने के लिए अजीब का उपयोग करता हूं Boolean

के अस्तित्व का एकमात्र कारण प्रकार के Booleanसंग्रह की क्षमता है Boolean(जेनरिक अनुमति नहीं देता है boolean, साथ ही साथ अन्य सभी आदिम भी)।


1
यह एक बाहरी पुस्तकालय (अपाचे कॉमन्स) है, हालांकि।
न्हादत्त

4
बहुविकल्पीय तर्क के लिए, एनम का उपयोग करना बेहतर होता है। इस प्रकार बूलियन को डेटा संरचनाओं में उपयोग के लिए (ऑटो) बॉक्सिंग चर के लिए छोड़ दिया जाना चाहिए।
JPE

39
बूलियन का उपयोग करते समय, शून्य सूचक अपवादों से बचने के लिए एक सुविधाजनक परीक्षण है Boolean.TRUE.equals(myBooleanObject)या Boolean.FALSE.equals(myBooleanObject)
क्रिस्टोफर Peisert

10
एक बूलियन ऑब्जेक्ट में केवल दो राज्य हैं - trueऔर falsenullहै नहीं वस्तु के एक राज्य, बल्कि वस्तु संदर्भ के एक राज्य।
हॉट लिक्स

2
अपाचे कॉमन की तरह छोड़ो "किसी ने बूलियन्स का मूल्यांकन करने के लिए पेंच किया हो सकता है ... चलो एक isTrue()विधि बनाते हैं ..." जो उपयोगिता कार्यों के इतिहास में सबसे विनम्र चीज की तरह लगता है। और फिर भी, किसी भी तरह, यह उपयोगी है ... यह यहां सबसे बड़ा wtf है।
corsiKa

33

वाह, धरती पर क्या है? क्या यह सिर्फ मैं या ये सभी उत्तर गलत हैं या कम से कम भ्रामक हैं?

बूलियन क्लास बूलियन आदिम प्रकार के आसपास एक आवरण है। इस आवरण का उपयोग एक ऐसी विधि में एक बूलियन को पारित करने में सक्षम होना है जो किसी वस्तु या जेनेरिक को स्वीकार करता है। यानी वेक्टर।

एक बुलियन ऑब्जेक्ट कभी भी शून्य का मान नहीं रख सकता है। यदि आपका बूलियन का संदर्भ शून्य है, तो इसका सीधा सा मतलब है कि आपका बूलियन कभी नहीं बना था।

आपको यह उपयोगी लग सकता है: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Boolean.java

एक शून्य बूलियन संदर्भ का उपयोग केवल उसी तर्क को ट्रिगर करने के लिए किया जाना चाहिए जिसमें आपके पास कोई अन्य अशक्त संदर्भ है। तीन राज्य तर्क के लिए इसका उपयोग अनाड़ी है।

EDIT: नोटिस, Boolean a = true;यह एक भ्रामक कथन है। यह वास्तव में Boolean a = new Boolean(true); यहाँ ऑटोबॉक्सिंग देखने के लिए कृपया कुछ के बराबर है : http://en.wikipedia.org/wiki/Boxing_%28computer_science%29#Autoboxing

शायद यह वह जगह है जहाँ से बहुत भ्रम की स्थिति आती है।

EDIT2: कृपया नीचे टिप्पणी पढ़ें। अगर किसी को इस बात का अंदाजा है कि इसे शामिल करने के लिए मेरे जवाब का पुनर्गठन कैसे किया जाए, तो कृपया ऐसा करें।


2
मुझे समझ नहीं आ रहा है कि आपका कथन "A बुलियन कभी शून्य हो सकता है"। मैं एक बूलियन ( Boolean a = true;) बना सकता हूं और फिर नल ( a = null;) में सेट कर सकता हूं । यह सुरुचिपूर्ण या बुद्धिमान नहीं हो सकता है, लेकिन यह संभव है।
peter.murray.rust

7
जब आप करते हैं Boolean a; एक बूलियन ऑब्जेक्ट के लिए एक संकेतक है। यदि आपने a = null;अपने बुलियन को अशक्त करने के लिए सेट नहीं किया है, तो आपने अपना संदर्भ शून्य करने के लिए निर्धारित किया है। क्या Boolean a = null; a.booleanValue();इस मामले में, आप कभी नहीं भी बनाया एक बूलियन वस्तु और इसलिए यह एक NullPointerException फेंक देंगे। यदि आपको और निर्देश की आवश्यकता हो तो मुझे बताएं।
user606723

इसके अलावा, जब आप ऐसा करते हैं Boolean a = true;, तो यह कुछ ऐसा जादू करता है कि वास्तव में इसकी व्याख्या हो जाती है क्योंकि Boolean a = new Boolean(true);थॉट्स संभवतः प्रदर्शन के कारणों के लिए पूरी तरह से सही नहीं हैं, लेकिन आपको यह महसूस करना होगा कि बुलियन अभी भी एक वस्तु है।
user606723

7
@missingno, किसी भी वस्तु से संबंधित सभी कोड को इससे निपटना पड़ता है। एक ऑब्जेक्ट संदर्भ या तो शून्य हो सकता है या नहीं। यह एक विशेष मामला नहीं है और इसके लिए विशेष विचार की आवश्यकता नहीं है।
user606723

3
आपको मेरी बात याद आ रही है @missingno। मैं सहमत हूं कि हमें अशक्त संदर्भ मूल्यों पर विचार करने की आवश्यकता है। मैं उस विरूद्ध कभी बहस नहीं कर रहा था। लेकिन हमें किसी भी संदर्भ के लिए ऐसा करने की आवश्यकता है एक शून्य बूलियन संदर्भ विशेष मामला नहीं है। और इसलिए बूलियन संदर्भ मानों को विशेष विचार की आवश्यकता नहीं है।
user606723

24

इसके तीन त्वरित कारण हैं:

  • डेटाबेस बूलियन मूल्यों का प्रतिनिधित्व करने के लिए, जो हो सकता है true, falseयाnull
  • के xsd:booleanसाथ घोषित XML स्कीमा के मूल्यों का प्रतिनिधित्व करने के लिएxsd:nillable="true"
  • सामान्य प्रकार का उपयोग करने में सक्षम होने के लिए: List<Boolean>- आप उपयोग नहीं कर सकतेList<boolean>

मैंने स्पष्ट रूप से "बूलियन" लिखा है, " boolean" (मन की शैली) नहीं, क्योंकि ओरेकल में आप आमतौर पर char(1) null'टी' और 'एफ' मूल्यों के साथ उपयोग करते हैं। तो यह हो सकता है (उदाहरण के लिए, हाइबरनेट प्रकार एडॉप्टर) शून्य हो सकता है :)
ग्रेज़ेगॉर ग्रेज़ीबक

2
क्या डेटाबेस बूलियन के लिए नल की अनुमति नहीं देता है? यदि आप स्तंभ को अशक्त होने के लिए सेट करते हैं, तो डेटाटाइप कोई मायने नहीं रखता है ...
मीकल बी।

@MichalB। Sybase (और SQL सर्वर) बिट प्रकार infocenter.sybase.com/help/index.jsp?topic=/…
mmmmmm

@Mark - नहीं, SQL सर्वर एक अशक्त
डेविड एम

11

जवाब जानने के लिए उत्तर: मैंने सोचा था कि मेरे अपने प्रश्न का उत्तर देना उपयोगी होगा क्योंकि मैंने उत्तरों से बहुत कुछ सीखा है। इस उत्तर का उद्देश्य उन लोगों की मदद करना है - जो मेरी तरह हैं - जिन्हें मुद्दों की पूरी समझ नहीं है। अगर मैं गलत भाषा का उपयोग करता हूं तो कृपया मुझे सुधारें।

  • अशक्त "मान" एक मान नहीं है और मूल रूप से trueऔर से अलग है false। यह वस्तुओं के लिए एक संकेतक की अनुपस्थिति है। इसलिए यह सोचना कि बूलियन 3-मूल्यवान है मौलिक रूप से गलत है
  • बूलियन के लिए वाक्यविन्यास संक्षिप्त है और इस तथ्य को छिपाता है कि संदर्भ वस्तुओं को इंगित करता है:

    Boolean a = true;

trueएक वस्तु है कि तथ्य को छुपाता है । अन्य समकक्ष कार्य हो सकते हैं:

Boolean a = Boolean.TRUE;

या

Boolean a = new Boolean(true);
  • संक्षिप्त वाक्य रचना

    if (a) ...

अधिकांश अन्य असाइनमेंट से अलग है और इस तथ्य को छिपाता है कि एक वस्तु संदर्भ या एक आदिम हो सकता है। यदि कोई वस्तु nullNPE से बचने के लिए परीक्षण करना आवश्यक है । मेरे लिए यह मनोवैज्ञानिक रूप से याद रखने में आसान है कि क्या कोई समानता परीक्षण है:

if (a == true) ...

जहां हमें अशक्त करने के लिए परीक्षण करने के लिए प्रेरित किया जा सकता है। तो छोटा रूप केवल तभी सुरक्षित होता aहै जब वह आदिम हो।

खुद के लिए अब मेरे पास सिफारिशें हैं:

  • 3-मूल्यवान तर्क के लिए कभी भी अशक्त का उपयोग न करें। केवल सही और गलत का उपयोग करें।
  • कभी भी Booleanएक विधि से वापस नहीं आ सकते हैं null। ही लौटा boolean
  • केवल Booleanकंटेनरों में तत्वों को लपेटने के लिए उपयोग करें , या उन तरीकों के लिए तर्क दें जहां ऑब्जेक्ट की आवश्यकता होती है

5
"नया बूलियन (जो भी)" का उपयोग न करें। यह ढेर पर एक नया बुलियन को तुरंत रोक देगा। फिर भी बुलियन अपरिवर्तनीय है। "Boolean.valueOf (जो भी)" का उपयोग करें जो एक संदर्भ बनाएगा जो Boolean.TRUE या Boolean.False को इंगित करता है जो कुछ भी निर्भर करता है।
सिमबो1905

1
जावा (12 साल के बाद IMHO) के साथ कई समस्याओं में से एक अशक्त मूल्यों के लिए दृष्टिकोण की असंगति है जो पुरानी भाषाओं में भी है। स्काला पर नज़र डालें तो इसमें एक टाइप किए गए विकल्प की अवधारणा है जो शून्य हो सकती है या इसका मान हो सकता है (उपवर्ग कोई नहीं या कुछ)। तब आप myOption.getOrElse (defaultValue) को कॉल कर सकते हैं। Scala-lang.org/api/current/scala/Option.html देखें इस सुविधा के बारे में कुछ भी जटिल नहीं है। फिर भी जैसा कि यह नई JVM भाषा में बनाया गया है, कई पुस्तकालय इसका उपयोग करते हैं। यह जावा के "पिछली शताब्दी" के कुछ मुद्दों को "फिक्स" करता है, लेकिन यह अभी भी उन फाइलों को संकलित करता है जो JRE पर चलती हैं।
सिमबो1905

10

प्रिमिटिव्स के लिए रैपर क्लासेस का उपयोग किया जा सकता है जहां ऑब्जेक्ट्स की आवश्यकता होती है, संग्रह एक अच्छा नमूना है।

कल्पना कीजिए कि आप किसी कारण के लिए दुकान का एक अनुक्रम की जरूरत है booleanएक में ArrayList, इस मुक्केबाजी द्वारा किया जा सकता booleanमें Boolean

इस बारे में यहाँ कुछ शब्द हैं

प्रलेखन से:

जैसा कि कोई भी जावा प्रोग्रामर जानता है, आप एक संग्रह में एक इंट (या अन्य आदिम मूल्य) नहीं डाल सकते हैं। संग्रह केवल वस्तु संदर्भों को धारण कर सकते हैं, इसलिए आपको आदिम मूल्यों को उचित आवरण वर्ग में रखना होगा (जो इंट के मामले में पूर्णांक है)। जब आप ऑब्जेक्ट को संग्रह से बाहर निकालते हैं, तो आप उस इंटेगर को प्राप्त करते हैं जिसे आप डालते हैं; यदि आपको एक इंट की आवश्यकता है, तो आपको intValue विधि का उपयोग करके इंटेगर को अनबॉक्स करना होगा। यह सब मुक्केबाजी और अनबॉक्सिंग एक दर्द है, और आपके कोड को बंद कर देता है। ऑटोबॉक्सिंग और अनबॉक्सिंग सुविधा दर्द और अव्यवस्था को खत्म करते हुए, प्रक्रिया को स्वचालित करती है।

http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html


3

Booleanजब आप कि क्या मूल्य से सौंपा गया था या अलग नहीं करना चाहते आवरण उपयोगी है trueऔर false। इसके निम्नलिखित तीन राज्य हैं:

  • सच
  • असत्य
  • परिभाषित नहीं है जो है null

जबकि booleanकेवल दो राज्य हैं:

  • सच
  • असत्य

उपरोक्त अंतर इसे Booleanमूल्यों की सूचियों में मददगार बना देगा , जो हो सकता है True, Falseया Null


नहीं, इसकी अशक्त स्थिति नहीं है, यह संदर्भ है।
मत्स्यमुन

मेरा मतलब था कि बोलियन का इस्तेमाल परिभाषित ट्रू / फाल्स और नॉट डिफाइंड के लिए किया जा सकता है।
रमेश पीवीके

3

मुझे लगता है कि किसी मामले में, आपके पास बूलियन क्षेत्र को अलग करने के लिए एक तंत्र होना चाहिए जो पहले से ही मूल्य निर्धारित करता है या नहीं।


1

बूलियन के लिए मुख्य उद्देश्य शून्य मान है। नल मान कहता है, कि संपत्ति अपरिभाषित है , उदाहरण के लिए डेटाबेस अशक्त स्तंभ ले लो।

यदि आपको वास्तव में प्राइमरी बूलियन से रैपर बुलियन तक प्रत्येक को परिवर्तित करने की आवश्यकता है, तो आप पुराने कोड का समर्थन करने के लिए निम्नलिखित का उपयोग कर सकते हैं:

Boolean set = Boolean.FALSE; //set to default value primitive value (false)
...
if (set) ...

6
'मुख्य उद्देश्य शून्य मान है'। नहीं, बूलियन का मुख्य उद्देश्य एक बूलियन को एक वस्तु के रूप में संदर्भित करना है।
user606723

@ user606723 ने सहमति व्यक्त की, जब मैं लिख रहा था तो मेरे दिमाग में डेटाबेस केस का जिक्र था।
जेमलनिक

1

बूलियन आवरण में ** नल ** मूल्य के लिए कई उपयोग हैं! :)

उदाहरण के लिए, आपके पास "न्यूज़लेटर" नाम का एक फ़ील्ड हो सकता है जो यह बताता है कि उपयोगकर्ता आपकी साइट से न्यूज़लेटर चाहता है या नहीं। यदि उपयोगकर्ता इस क्षेत्र में एक मूल्य का चयन नहीं करता है, तो आप उस स्थिति के लिए एक डिफ़ॉल्ट व्यवहार को लागू करना चाह सकते हैं? स्पष्ट रूप से, सेट नहीं (या चयनित या ** शून्य **) नहीं है, यह सही या गलत नहीं है।

लेकिन, अगर "सेट नहीं" आपके मॉडल पर लागू नहीं होता है, तो बूलियन आदिम को न बदलें;)


1

एक बुलियन तत्व की सख्त परिभाषा में, केवल दो मूल्य हैं। एक आदर्श दुनिया में, यह सच होगा। वास्तविक दुनिया में, तत्व गायब या अज्ञात हो सकता है। आमतौर पर, इसमें उपयोगकर्ता इनपुट शामिल होता है। एक स्क्रीन आधारित प्रणाली में, इसे एक संपादन द्वारा मजबूर किया जा सकता है। किसी डेटाबेस या XML इनपुट का उपयोग करते हुए बैच की दुनिया में, तत्व आसानी से गायब हो सकता है।

इसलिए, हम जिस गैर-परिपूर्ण दुनिया में रहते हैं, बूलियन वस्तु इस मायने में महान है कि यह गायब या अज्ञात स्थिति को शून्य के रूप में दर्शा सकती है। आखिरकार, कंप्यूटर केवल वास्तविक दुनिया को सभी संभावित राज्यों के लिए खाता होना चाहिए और उन्हें अपवादों को फेंकने के लिए संभालना चाहिए (ज्यादातर चूंकि ऐसे मामले होते हैं जहां अपवाद फेंकना सही प्रतिक्रिया होगी)।

मेरे मामले में, बूलियन ऑब्जेक्ट सही जवाब था क्योंकि इनपुट XML में कभी-कभी तत्व गायब था और मुझे अभी भी एक मूल्य मिल सकता है, इसे बूलियन को असाइन करें और फिर इसके साथ एक सही या गलत परीक्षण का उपयोग करने से पहले एक अशक्त के लिए जांच करें। ।

बस मेरे 2 सेंट।


1

उपरोक्त सभी अच्छे उत्तरों के लिए, मैं अभी जावा सर्वलेट HttpSessionक्लास में एक ठोस उदाहरण देने जा रहा हूँ । आशा है कि यह उदाहरण आपको अभी भी हो सकने वाले कुछ प्रश्न को स्पष्ट करने में मदद करता है।

यदि आपको सत्र के लिए मानों को संग्रहीत और पुनर्प्राप्त करने की आवश्यकता है, तो आप setAttribute(स्ट्रिंग, ऑब्जेक्ट) और getAttribute(स्ट्रिंग, ऑब्जेक्ट) विधि का उपयोग करते हैं। तो एक बूलियन मान के लिए, यदि आप इसे http सत्र में संग्रहीत करना चाहते हैं, तो आपको बूलियन वर्ग का उपयोग करने के लिए मजबूर किया जाता है।

HttpSession sess = request.getSession(false);
Boolean isAdmin = (Boolean) sess.getAttribute("admin");
if (! isAdmin) ...

NullPointerExceptionयदि विशेषता मान सेट नहीं है तो अंतिम पंक्ति का कारण होगा । (जो मुझे इस पोस्ट के लिए नेतृत्व कारण है)। तो 3 तर्क राज्य यहाँ रहने के लिए है, चाहे आप इसका उपयोग करना पसंद करते हैं या नहीं।


0

सबसे अच्छा तरीका पूरी तरह से बूलियंस से बचना होगा, क्योंकि प्रत्येक बूलियन का अर्थ है कि आपके कोड में कहीं भी एक सशर्त विवरण है (देखें http://www.antiifcampaign.com/ और यह प्रश्न: क्या आप बिना किसी स्टेटमेंट के कोई भी एल्गोरिथ्म लिख सकते हैं ; )।

हालांकि, व्यावहारिक रूप से आपको समय-समय पर बूलियन का उपयोग करना पड़ता है, लेकिन, जैसा कि आप पहले से ही खुद से पता लगा चुके हैं, बूलियंस से निपटने में अधिक त्रुटि प्रवण और अधिक बोझिल है। इसलिए मैं जहां भी संभव हो, बूलियन का उपयोग करने का सुझाव दूंगा। इस से अपवाद अशक्त बूलियन-कॉलम के साथ एक विरासत डेटाबेस हो सकता है, हालांकि मैं अपनी मैपिंग में भी इसे छिपाने की कोशिश करूंगा।


बूलियंस के साथ व्यवहार करना किसी अन्य वस्तु से निपटने में त्रुटि के रूप में है। बीटीडब्ल्यू, लिंक टाइप चेकिंग के लिए आईएफएस के प्रसार के खिलाफ है, सामान्य उपयोग के लिए नहीं। और बदले में, यह "खतरनाक" है क्योंकि यह संशोधनों को और अधिक कठिन बना देता है। तो IF प्रति सेफ़ के साथ कुछ भी गलत नहीं है।
मिस्टर स्मिथ

सवाल का जवाब नहीं।
मत्स्यमणि

@ मिस्टरस्मिथ इम्हो एक बुलियन ध्वज का अक्सर एक प्रकार के चेकिंग वेरिएबल के रूप में दुरुपयोग किया जाता है, इसलिए लिंक यहां भी लागू हो सकता है। यह सिर्फ एक संकेत होना चाहिए कि किसी व्यक्ति को यह सोचना चाहिए कि क्या बूलियन एक निश्चित स्थिति में सही उपकरण है। बयान "पूरी तरह से बूलियंस से बचें" निश्चित रूप से बहुत कट्टरपंथी और व्यावहारिक रूप से असंभव है, यही कारण है कि मैंने दूसरा पैराग्राफ जोड़ा। मैंने चीजों को स्पष्ट करने के लिए "अधिक त्रुटि प्रवण और अधिक बोझिल" भी जोड़ा है।
रोलैंड श्नाइडर

0

जब आपको तीन अवस्थाओं की आवश्यकता हो तो बुलियन बहुत मददगार हो सकता है। जैसे सॉफ्टवेयर टेस्टिंग में यदि टेस्ट पास किया जाता है तो सही, यदि फेल भेजा जाता है और यदि टेस्ट केस में बाधा पहुंचती है, तो वह टेस्ट केस को निरस्त कर देगा।


2
क्या इसके लिए एनम सबसे अच्छा नहीं होगा? संभवतः एक ग्राहक के लिए अप्रत्याशित रूप से NullPointerException उत्पन्न करने का विरोध करने के लिए, enums स्पष्ट रूप से "राज्यों" को परिभाषित करेगा
कार्तिक चुघ

राज्य मशीनों में बूलियन के बजाय हमेशा एनम पसंद करते हैं। आप कभी नहीं जानते कि व्यापार की आवश्यकता में एक नया चौथा राज्य कब आता है।
अनुपमचूघ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.