1. अभिव्यक्ती वि विधाने

Java मध्ये, दोन श्रेणींमध्ये फरक करणे उपयुक्त आहे: विधाने आणि अभिव्यक्ती . विधान सहसा कार्यान्वित केले जाते असे म्हटले जाते , तर अभिव्यक्तीचे मूल्यमापन केले जाते असे म्हटले जाते . पण ती सर्वात महत्त्वाची गोष्ट नाही.

विधान आणि अभिव्यक्ती मधील मुख्य फरक हा आहे की अभिव्यक्तीचे मूल्यांकन केल्याने परिणाम होतो . आणि या परिणामाचा एक प्रकार आहे, आणि तो व्हेरिएबलला नियुक्त केला जाऊ शकतो किंवा इतर काही अभिव्यक्तीमध्ये वापरला जाऊ शकतो.

उदाहरणे:

कोड नोट्स
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. टर्नरी ऑपरेटर

हा लाइफ हॅक आधीच्यापेक्षा अधिक मनोरंजक आहे. Java मध्ये एक विशेष टर्नरी ऑपरेटर आहे . त्याची वाक्यरचना विधानाच्या वाक्यरचना सारखीच आहे 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|

Java कडे संख्येच्या परिपूर्ण मूल्याची गणना करण्याची पद्धत आहे: 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");