"हाय, अमिगो!"
"आता आमच्याकडे लॉजिकल ऑपरेटर्सवर एक छोटा धडा असेल."
"तुम्हाला कोणते लॉजिकल ऑपरेटर माहित आहेत?"
— किंवा (||), आणि (&&), नाही(!)
"हो. चांगले काम. आणि ते कसे काम करतात ते आठवते का?"
"हो."
"किंवा कमीत कमी एक ऑपरेंड सत्य असताना सत्य मिळते."
"आणि जेव्हा दोन्ही ऑपरेंड सत्य असतात तेव्हा सत्य मिळते."
"सत्य ते असत्य आणि असत्य ते सत्य बदलत नाही."
"हे बरोबर आहे. आणि या अभिव्यक्तीमध्ये ऑपरेटरचे मूल्यांकन कोणत्या क्रमाने केले जाते?"
boolean a = true;
boolean b = false;
boolean c = true;
boolean result = a && b || !c && b || !a;
"हे सर्व खूप सोपे आहे."
"प्रथम, नाही (!), नंतर AND (&&), आणि नंतर OR (||) अगदी शेवटी."
जर आम्ही कंस जोडला तर आम्हाला मिळेल:
boolean a = true;
boolean b = false;
boolean c = true;
boolean result = (a && b) || ((!c) && b) || (!a);
"ते सर्व बरोबर आहे, चांगले केले. आणि परिणाम काय?"
— 1) (a && b) == (सत्य && असत्य) == असत्य
२) ((!c) && b) == (खोटे && असत्य) == असत्य
३) (!a) == खोटे
4) खोटे || खोटे || असत्य == खोटे
"परिणाम खोटा आहे."
"तुला हा विषय नीट माहीत आहे असे वाटते. मग मी तुला काही गुपिते सांगेन."
"प्रथम, तार्किक अभिव्यक्तींचे डावीकडून उजवीकडे मूल्यांकन केले जाते."
"दुसरे, शॉर्ट-सर्किट मूल्यमापन येथे वापरले जाते (आवश्यक असल्यासच गणना केली जाते) जर अभिव्यक्तीच्या काही भागाचे मूल्यांकन केल्यावर अंतिम परिणाम आधीच ज्ञात असेल, तर उर्वरित अभिव्यक्तीचे मूल्यमापन केले जात नाही."
boolean result = (true && false) || (true && true) || (true && false);
"ही अभिव्यक्ती OR (||) ऑपरेटरद्वारे विभक्त केलेल्या तीन भागांमध्ये विभागली गेली आहे."
"किमान एक भाग सत्य असल्यास, उत्तर खरे आहे आणि इतर कशाचाही विचार करण्याची गरज नाही. त्यानुसार, अभिव्यक्तीचे मूल्यमापन असे केले जाते:"
1) पहिल्या भागाचे मूल्यमापन करा: (सत्य आणि असत्य) == असत्य
२) दुसऱ्या भागाचे मूल्यमापन करा: (सत्य आणि सत्य) == खरे
3) आम्ही तिसऱ्या भागाचे मूल्यमापन करत नाही, कारण हे आधीच स्पष्ट आहे की उत्तर खरे असेल .
"या दृष्टिकोनाला आळशी मूल्यांकन देखील म्हणतात."
"ठीक आहे. आणि त्यात विशेष काय?"
"काहीही नाही—जोपर्यंत तुम्ही अभिव्यक्तीमध्ये पद्धती कॉल करणे सुरू करत नाही. जर अभिव्यक्तीचा भाग वगळला असेल, तर वगळलेल्या भागातील पद्धती कॉल केल्या जाणार नाहीत."
"पण हा दृष्टीकोन खूप सामान्य झाला आहे. कारण येथे आहे:"
Job job = null;
if (job != null && job.isDone())
{
…
}
"अभिव्यक्तीचे मूल्यमापन केल्यावर जॉब शून्य असेल, तर job.isDone() कॉल होणार नाही!"
"खरोखर, अभिव्यक्तीचा पहिला भाग असत्य आहे, जो AND (&&) नंतर येतो. त्यामुळे, संपूर्ण अभिव्यक्ती खोटी असल्याचे ओळखले जाईल, आणि दुसरा भाग आवश्यक नसेल."
"नक्की. हे एक चांगले तंत्र आहे, बरोबर?"
"हो."
GO TO FULL VERSION