1. भाव बनाम कथन

जावा में, दो श्रेणियों के बीच अंतर करना मददगार होता है: कथन और भावएक बयान को आमतौर पर निष्पादित कहा जाता है , जबकि एक अभिव्यक्ति का मूल्यांकन किया जाता है । लेकिन यह सबसे महत्वपूर्ण बात नहीं है.

कथन और व्यंजक के बीच मुख्य अंतर यह है कि व्यंजक के मूल्यांकन का परिणाम होता है । और इस परिणाम का एक प्रकार है, और इसे एक चर के लिए असाइन किया जा सकता है या किसी अन्य अभिव्यक्ति में उपयोग किया जा सकता है।

उदाहरण:

कोड टिप्पणियाँ
int x; कथन
(a < 10) व्यंजक जिसका प्रकार हैboolean
i++; iअभिव्यक्ति जिसका प्रकार चर के प्रकार के समान है
x = 5; xअभिव्यक्ति जिसका प्रकार चर के प्रकार के समान है

और यह हमें क्या देता है?

सबसे पहले, हम इस तथ्य का लाभ उठा सकते हैं कि कई कथन वास्तव में अभिव्यक्ति हैं (जिसका अर्थ है कि वे मूल्य का मूल्यांकन करते हैं)। उदाहरण के लिए, इस तरह का कोड काम करेगा:

कोड टिप्पणियाँ
int x, y, z;
x = y = z = 1;
int x, y, z;
x = (y = (z = 1))

दूसरा, यदि हम चाहें तो किसी व्यंजक के मूल्यांकन के परिणाम की उपेक्षा कर सकते हैं।

कोड कोड जहां हम परिणाम को अनदेखा करते हैं:
int x = scanner.nextInt();
boolean m = (5 < 10);
scanner.nextInt();
(5 < 10);

हम किसी व्यंजक के मूल्यांकन के परिणाम को नज़रअंदाज़ कर देते हैं, उदाहरण के लिए, यदि व्यंजक में कुछ उपयोगी करना शामिल है, और यह क्रिया हमारे लिए महत्वपूर्ण है, परिणाम नहीं।


2. टर्नरी ऑपरेटर

यह लाइफ हैक पहले से ज्यादा दिलचस्प है। जावा में एक विशेष टर्नरी ऑपरेटर है । इसका सिंटैक्स कुछ हद तक स्टेटमेंट के सिंटैक्स के समान है if-else:

Condition ? Expression 1 : Expression 2;

यदि स्थिति सत्य है, तो अभिव्यक्ति 1 का मूल्यांकन किया जाता है, अन्यथा अभिव्यक्ति 2 का मूल्यांकन किया जाता है। स्थिति के बाद एक प्रश्न चिह्न होता है , और दो भावों को कोलन द्वारा अलग किया जाता है ।

टर्नरी ऑपरेटर और एक स्टेटमेंट के बीच मुख्य अंतर if-elseयह है कि टर्नरी ऑपरेटर एक एक्सप्रेशन है, जिसका अर्थ है कि हम इसके परिणाम को किसी चीज़ पर असाइन कर सकते हैं।

उदाहरण के लिए, मान लीजिए कि हम न्यूनतम दो संख्याओं की गणना करना चाहते हैं। टर्नरी ऑपरेटर का उपयोग करते हुए, यह कोड इस तरह दिखेगा:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

या, मान लें कि आपको किसी शर्त के आधार पर एक चर के लिए अलग-अलग मान निर्दिष्ट करने की आवश्यकता है। आप उसे कैसे करते हैं?

एक विकल्प एक if-elseकथन का उपयोग करना है:

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

दूसरा विकल्प टर्नरी ऑपरेटर का उपयोग करना है , जो कि if-elseकथन के लिए आशुलिपि है:

int age = 25;
int money = age > 30 ? 100 : 50;

तो कौन सा उपयोग करना बेहतर है - एक if-elseबयान या टर्नरी ऑपरेटर ? निष्पादन की गति के संदर्भ में, बहुत अधिक अंतर नहीं है। यह कोड पठनीयता का मामला अधिक है। और यह एक बहुत ही महत्वपूर्ण बिंदु है: कोड को न केवल सही ढंग से काम करना चाहिए, बल्कि अन्य प्रोग्रामरों के पढ़ने के लिए भी आसान होना चाहिए।

सबसे सरल नियम यह है: यदि कोड एक पंक्ति पर फिट बैठता है , तो टर्नरी ऑपरेटर का उपयोग करें ; लेकिन अगर यह एक लाइन पर फिट नहीं होता हैif-else , तो एक बयान का उपयोग करना बेहतर होता है।



3. वास्तविक संख्याओं की तुलना करना

जैसा कि पहले उल्लेख किया गया है, आप केवल वास्तविक संख्याओं को पकड़कर उनकी तुलना नहीं कर सकते हैं। इस बात की हमेशा संभावना होती है कि कुछ महत्वपूर्ण अंक छोड़े जा सकते हैं, जिससे अनपेक्षित दुष्प्रभाव हो सकते हैं।

इसलिए समय-परीक्षणित दृष्टिकोण है। यदि दो वास्तविक संख्याएँ बहुत कम मान से भिन्न होती हैं, तो उन्हें समान माना जा सकता है। उदाहरण:

double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");

लेकिन हमें केवल इतना ही चिंता करने की ज़रूरत नहीं है, क्योंकि संख्याओं के बीच का अंतर ऋणात्मक हो सकता है। तो काम करने के इस दृष्टिकोण के लिए, आपको न केवल संख्याओं के बीच के अंतर की तुलना करने की आवश्यकता है, बल्कि संख्याओं के बीच के अंतर का निरपेक्ष मान:|a-b|

जावा में किसी संख्या के निरपेक्ष मान की गणना के लिए एक विधि है: Math.abs():

int m = Math.abs(value);

नतीजतन, ऊपर हमारे उदाहरण का सही संस्करण इस तरह दिखेगा:

double a = 1.000001;
double b = 1.000002;

if ( Math.abs(b - a) < 0.0001 )
   System.out.println("The numbers are equal");
else
   System.out.println("The numbers are not equal");