नमस्ते! आज का पाठ बहुत लंबा नहीं होगा, लेकिन यह निश्चित रूप से उपयोगी होगा :) हम तथाकथित टर्नरी ऑपरेटर के बारे में बात करने जा रहे हैं । त्रिगुट का अर्थ है " तीन भागों से बना "। यह नियंत्रण प्रवाह कथन का एक विकल्प है
if-else
जिसे आप पहले ही प्राप्त कर चुके हैं। आइए एक उदाहरण देते हैं। मान लीजिए कि किसी ने आर-रेटेड फिल्म देखने का फैसला किया है (17 वर्ष से कम उम्र के माता-पिता या वयस्क अभिभावक की आवश्यकता है)। प्रवेश द्वार पर अपनी आयु की जाँच करता है: यदि वह आयु जाँच में उत्तीर्ण होता है, तो उसे प्रवेश करने की अनुमति दी जाती है; यदि नहीं, तो उसे घर भेज दिया जाता है। आइए एक Person
वर्ग घोषित करें और एक if-else
बयान का उपयोग करके इसकी जांच करें:
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
कंसोल आउटपुट:
"Everything is in order. Come in!"
यदि हम कंसोल आउटपुट को हटाते हैं, तो हमारा चेक इस तरह दिखता है:
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
यहाँ तर्क बहुत सरल है: एक शर्त की जाँच की जाती है (उम्र> = 18) परिणाम के आधार पर, चर को usherResponse
अशर की प्रतिक्रिया के साथ दो में से एक तार सौंपा जाता है। प्रोग्रामिंग में ऐसी स्थितियां ("एक शर्त - दो संभावित परिणाम") बेहद आम हैं। और इसीलिए टर्नरी ऑपरेटर बनाया गया था। हम अपने चेक को कोड की एक पंक्ति में सरल बनाने के लिए इसका उपयोग कर सकते हैं:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
यहां बताया गया है कि यह ऑपरेटर कैसे काम करता है। इसे टर्नरी ऑपरेटर कहा जाता है, क्योंकि इसमें 3 घटक शामिल होते हैं:
- एक शर्त (
person.getAge() > 18
) - दो संभावित परिणाम ( "सब कुछ क्रम में है। अंदर आओ!" और "यह फिल्म आपकी उम्र के लिए उपयुक्त नहीं है!" )
person.getAge() > 18 ?
"क्या इस व्यक्ति की आयु 18 वर्ष से अधिक है?" फिर हम पहला मान लिखते हैं । इस मान का उपयोग तब किया जाता है जब स्थिति का मूल्यांकन होता हैtrue
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
क्या इस व्यक्ति की आयु 18 वर्ष से अधिक है? अगर हाँ, तो usherResponse
वेरिएबल को "सब कुछ क्रम में है। कम इन!" पर सेट करें। इसके बाद आता है प्रतीक :
और दूसरा मान . इस मान का उपयोग तब किया जाता है जब स्थिति का मूल्यांकन होता हैfalse
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
क्या इस व्यक्ति की आयु 18 वर्ष से अधिक है? अगर हाँ, तो usherResponse
वेरिएबल को "सब कुछ क्रम में है। कम इन!" पर सेट करें। . यदि नहीं, तो usherResponse
वेरिएबल को "यह फिल्म आपकी उम्र के लिए उपयुक्त नहीं है!" पर सेट करें। सामान्य तौर पर, यहाँ टर्नरी ऑपरेटर का तर्क कैसा दिखता है। स्थिति ? परिणाम 1 : परिणाम 2 वैसे, कंडीशन के आसपास कोष्ठकों की आवश्यकता नहीं है: हमने उन्हें अधिक पठनीयता के लिए जोड़ा है। यह उनके बिना भी काम करता है:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
तो आपको क्या इस्तेमाल करना चाहिए? एक if-else
बयान या टर्नरी ऑपरेटर? प्रदर्शन के मामले में कोई अंतर नहीं है। अधिक सटीक, शायद वहाँ है, लेकिन यह नगण्य है। यहां सबसे बड़ा विचार आपके कोड की पठनीयता है। आपके द्वारा लिखे गए कोड को न केवल सही ढंग से काम करना चाहिए, बल्कि पढ़ने में भी आसान होना चाहिए । आखिरकार, यह अन्य प्रोग्रामर, आपके सहयोगियों द्वारा "विरासत में मिला" हो सकता है! अगर इसे समझना मुश्किल है, तो यह उनके और आपके काम को जटिल बना देगा (वे हर 5 मिनट में स्पष्टीकरण के लिए आपके पास दौड़े चले आएंगे)। सामान्य अनुशंसा यह है: यदि स्थिति सरल और आसानी से सत्यापित है, तो आप बिना नुकसान के टर्नरी ऑपरेटर का उपयोग कर सकते हैं। यह आपको कोड की मात्रा और की संख्या को कम करने देता हैif-else
बयान (और उनमें से पहले से ही बहुत सारे हो सकते हैं)। लेकिन यदि स्थिति जटिल है और इसमें कई चरण शामिल हैं, तो if-else
कथन का उपयोग करना बेहतर है। उदाहरण के लिए, इस मामले में टर्नरी ऑपरेटर का उपयोग करना एक बुरा विचार होगा:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
यह तुरंत स्पष्ट नहीं होता कि यहाँ क्या हो रहा है! कोड को पढ़ना बहुत कठिन हो गया है। और सभी जटिल स्थिति के कारण:
- यदि कोई 18 वर्ष से बड़ा है, उसके पास टिकट (या मुफ्त पास) है, और उसके कोई छोटे बच्चे नहीं हैं, तो वह अंदर आ सकता है।
- यदि शर्त का एक भी भाग असत्य है, तो वह नहीं कर सकता।
if-else
। हां, हमारा कोड बड़ा होगा, लेकिन यह बहुत अधिक पठनीय होगा। और यदि आपके सहकर्मी इस कोड को प्राप्त करते हैं तो उन्हें हथेली का सामना नहीं करना पड़ेगा :) अंत में, मैं आपके लिए एक अच्छी सिफारिश कर सकता हूं। हमने पाठ के दौरान कोड पठनीयता को छुआ। रॉबर्ट मार्टिन की पुस्तक "क्लीन कोड", जो एक क्लासिक बन गई है, इस विषय को समर्पित है। यह प्रोग्रामर के लिए सर्वोत्तम प्रथाओं और सिफारिशों को एक साथ लाता है, जो आपको कोड लिखने में मदद करेगा जो न केवल कार्यात्मक है, बल्कि आसानी से पढ़ने योग्य भी है।
GO TO FULL VERSION