हर प्रोग्राम को प्रतिक्रिया देने की आवश्यकता होती है। एक उपयोगकर्ता बटन पर क्लिक करता है। एक API डेटा लौटाता है। एक फॉर्म फ़ील्ड खाली हो जाती है। बिना किसी ब्रांचिंग (branching) के तरीके के, आपका कोड वास्तव में जो कुछ भी हो रहा है, उसकी परवाह किए बिना लाइन दर लाइन चलता रहेगा। कंडीशनल्स (Conditionals) जावास्क्रिप्ट को चुनने की वह क्षमता देते हैं। वे आपके फंक्शन्स के भीतर निर्णय लेने वाले, गेटकीपर की तरह होते हैं जो तय करते हैं कि क्या चलेगा और क्या स्किप होगा। एक बार जब आप उन्हें अच्छी तरह से लिखना समझ जाते हैं, तो आप कठोर स्क्रिप्ट लिखना बंद कर देते हैं और ऐसा सॉफ़्टवेयर बनाना शुरू कर देते हैं जो वास्तव में प्रतिक्रिया देता है।

कंडीशनल्स (Conditionals) क्यों महत्वपूर्ण हैं

कंट्रोल फ्लो (Control flow) लॉजिक की रीढ़ है। आप सर्वर पर पासवर्ड पोस्ट करने से पहले उन्हें वैलिडेट करने के लिए कंडीशनल्स का उपयोग करते हैं। टैक्स की गणना करने से पहले आप चेक करते हैं कि शॉपिंग कार्ट खाली है या नहीं। आप यह पता लगाते हैं कि नेटवर्क रिक्वेस्ट विफल हुई है या नहीं ताकि आप खाली स्क्रीन के बजाय एरर दिखा सकें। ये सभी परिदृश्य एक ही सरल विचार पर निर्भर करते हैं: किसी चीज़ का मूल्यांकन करें, फिर उसके अनुसार कार्य करें।

कंडीशनल्स के बिना, आपका एप्लिकेशन एक संवाद के बजाय एक एकालाप (monologue) होगा। यह विभिन्न डेटा परिदृश्यों को नहीं संभाल पाएगा, एरर को कुशलता से मैनेज नहीं कर पाएगा, या उपयोगकर्ता की क्रियाओं पर किसी भी सार्थक तरीके से प्रतिक्रिया नहीं दे पाएगा। वे आपको यह नियंत्रित करने देते हैं कि वास्तविक दुनिया की अनिश्चितता के तहत आपका प्रोग्राम कैसे चलता है।

बेसिक if स्टेटमेंट

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

if (x % 2 === 0) {
    console.log("Even");
}

इस स्निपेट में, मोडुलस ऑपरेटर (modulus operator) यह जाँचता है कि क्या x दो से पूरी तरह विभाजित होता है। जब शेषफल (remainder) शून्य होता है, तो कंसोल स्ट्रिंग को लॉग करता है। यदि x विषम (odd) है, तो कुछ नहीं होता है। ब्लॉक को अनदेखा कर दिया जाता है और निष्पादन (execution) नीचे जारी रहता है।

वह शांत अनदेखी महत्वपूर्ण है। कभी-कभी आप केवल एक एकल क्रिया की रक्षा करना चाहते हैं। शायद आप किसी बटन में CSS क्लास केवल तभी जोड़ना चाहते हैं जब वह सक्रिय हो, या किसी ऐरे (array) में आइटम केवल तभी जोड़ना चाहते हैं जब इनपुट खाली न हो। एक साधारण if स्टेटमेंट आपको वह लॉजिक लिखने के लिए मजबूर किए बिना उन क्षणों को संभालता है जिसकी आपको आवश्यकता नहीं है।

if-else के साथ एक विकल्प जोड़ना

वास्तविक निर्णयों के आमतौर पर दो पक्ष होते हैं। या तो उपयोगकर्ता पर्याप्त उम्र का है, या नहीं है। या तो भुगतान सफल रहा, या विफल हो गया। if-else संरचना दोनों को कवर करती है।

if (age >= 18) {
    console.log("Adult");
} else {
    console.log("Not an Adult");
}

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

else if के साथ कई रास्तों की जाँच करना

जीवन शायद ही कभी केवल दो विकल्प देता है। आपको किसी संख्या को पॉजिटिव, नेगेटिव या ज़ीरो के रूप में वर्गीकृत करने की आवश्यकता हो सकती है। आप वजन के आधार पर शिपिंग दर निर्धारित कर सकते हैं। क्रमबद्ध, कई तुलनाओं के लिए, else if का उपयोग करें।

if (x > 0) {
    console.log("Positive");
} else if (x < 0) {
    console.log("Negative");
} else {
    console.log("Zero");
}

JavaScript इनका मूल्यांकन ऊपर से नीचे की ओर करता है। जैसे ही एक शर्त पास होती है, यह उस ब्लॉक को चलाता है और बाकी को अनदेखा कर देता है। क्रम मायने रखता है। यदि आपने x > 100 की जाँच करने के बाद x > 0 की जाँच की, तो सख्त जाँच कभी नहीं चलेगी क्योंकि ढीली जाँच उसे पहले ही पकड़ लेगी। else if को एक प्राथमिकता सूची (priority list) के रूप में सोचें।

switch स्टेटमेंट

जब आप एक मान की तुलना कई अलग-अलग विकल्पों से करते हैं, तो else if स्टेटमेंट्स की एक लंबी श्रृंखला दोहराव वाली लग सकती है। एक switch स्टेटमेंट इसे साफ कर देता है। यह एक एक्सप्रेशन को case क्लॉज़ के साथ मैच करता है और मैचिंग ब्लॉक को चलाता है।

switch (true) {
    case marks >= 90:
        Branch = "Computer science";
        break;
    case marks >= 80:
        Branch = "Mechanical";
        break;
    default:
        Branch = "Other";
}

यह उदाहरण सीधे तौर पर boolean कंडीशंस का मूल्यांकन करने के लिए switch(true) का उपयोग करता है, जो एक सामान्य JavaScript पैटर्न है जब आपका लॉजिक सटीक समानता के बजाय रेंज (ranges) पर निर्भर करता है। break कीवर्ड आवश्यक है। इसके बिना, निष्पादन अगले केस पर चला जाता है चाहे वह मैच करे या न करे, जो कि यहाँ शायद ही कभी आपकी इच्छा हो। default क्लॉज़ एक अंतिम else की तरह कार्य करता है, जो उन सभी चीज़ों को पकड़ता है जो पिछले केस में फिट नहीं बैठती हैं।

Switch तब चमकता है जब आपके पास स्पष्ट, निश्चित विकल्प हों। यह else if ब्लॉक्स के ऊंचे ढेर की तुलना में स्कैन करने में अक्सर आसान होता है, खासकर जब प्रत्येक ब्रांच बस एक मान असाइन करती है या एक एकल फंक्शन को कॉल करती है।

टर्नरी ऑपरेटर (Ternary Operator)

छोटे बाइनरी निर्णयों के लिए, टर्नरी ऑपरेटर चीज़ों को संक्षिप्त रखता है। यह तीन ऑपरेंड (operands) लेता है: एक कंडीशन, यदि सच हो तो एक मान, और यदि गलत हो तो एक मान।

const result = (age >= 18) ? "Eligible" : "Not eligible";

आप इसका उपयोग त्वरित असाइनमेंट या इनलाइन रिटर्न के लिए कर सकते हैं। यह तब अच्छा काम करता है जब परिणाम एक सरल एक्सप्रेशन हो। टर्नरी को तीन स्तरों तक नेस्ट (nest) करने की इच्छा से बचें। एक नेस्टेड टर्नरी लाइनें बचा सकती है, लेकिन यह पठनीयता (readability) की कीमत पर होता है। जब आपका लॉजिक बढ़ता है, तो if-else ब्लॉक आमतौर पर उस अगले डेवलपर के लिए बेहतर होता है जो फ़ाइल खोलता है।

नेस्टेड निर्णय (Nested Decisions)

जटिल लॉजिक के लिए कभी-कभी फॉलो-अप प्रश्न पूछने की आवश्यकता होती है। आप निर्णय को और सटीक बनाने के लिए एक if के अंदर दूसरे if को नेस्ट कर सकते हैं।

if (weather === "sunny") {
    if (temp > 30) {
        console.log("