प्रत्येक प्रोग्रामला प्रतिसाद देण्याची गरज असते. युजर बटणावर क्लिक करतो. API डेटा परत करतो. फॉर्ममधील फील्ड रिकामे होते. जर शाखा (branching) तयार करण्याचा मार्ग नसेल, तर प्रत्यक्षात काय घडत आहे याकडे दुर्लक्ष करून तुमचा कोड ओळीनुसार (line by line) रन होईल. Conditionals JavaScript ला निवड करण्याची क्षमता देतात. ते तुमच्या फंक्शन्समधील निर्णय घेणारे (decision makers) आहेत, जे काय रन करायचे आणि काय वगळायचे हे ठरवणारे गेटकीपर्स आहेत. एकदा तुम्हाला ते चांगल्या प्रकारे लिहायचे कसे हे समजले की, तुम्ही केवळ ताठर (rigid) स्क्रिप्ट्स लिहिणे थांबवता आणि प्रत्यक्षात प्रतिसाद देणारे सॉफ्टवेअर बनवू लागता.

Conditionals का महत्त्वाचे आहेत

कंट्रोल फ्लो (Control flow) हा लॉजिकचा कणा आहे. सर्व्हरवर पासवर्ड पोस्ट करण्यापूर्वी तुम्ही ते व्हॅलिडेट करण्यासाठी conditionals वापरता. टॅक्स मोजण्यापूर्वी शॉपिंग कार्ट रिकामी आहे की नाही हे तुम्ही तपासता. नेटवर्क रिक्वेस्ट फेल झाली आहे का हे तुम्ही शोधता जेणेकरून तुम्ही रिकाम्या स्क्रीनऐवजी एरर दाखवू शकाल. या सर्व परिस्थिती एकाच साध्या कल्पनेवर अवलंबून आहेत: काहीतरी तपासा (evaluate), आणि त्यानुसार कृती करा.

Conditionals शिवाय, तुमचे ॲप्लिकेशन संवादाऐवजी एक स्वगत (monologue) असेल. ते वेगवेगळ्या डेटा परिस्थिती हाताळू शकणार नाही, एरर्स व्यवस्थित मॅनेज करू शकणार नाही किंवा युजरच्या कृतींना कोणत्याही अर्थपूर्ण पद्धतीने प्रतिसाद देऊ शकणार नाही. ते तुमच्या प्रोग्रामला वास्तविक जगातील अनिश्चिततेमध्ये कसा रन करायचा याचे नियंत्रण देतात.

मूलभूत if स्टेटमेंट

सुरुवात करण्यासाठी सर्वात सोपी जागा म्हणजे स्वतंत्र if आहे. ते सांगते की, जर ही गोष्ट सत्य (true) असेल, तर हे काम करा. बस एवढेच. कोणताही पर्याय नाही, कोणताही पर्यायी मार्ग नाही.

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

या स्निपेटमध्ये, मॉड्युलस ऑपरेटर (modulus operator) x ला दोनने पूर्ण भाग जातो का हे तपासतो. जेव्हा बाकी (remainder) शून्य असते, तेव्हा कंसोल स्ट्रिंग लॉग करते. जर x विषम (odd) असेल, तर काहीही घडत नाही. तो ब्लॉक दुर्लक्षित केला जातो आणि एक्झिक्यूशन खाली सुरू राहते.

तो शांतपणे दुर्लक्षित करणे महत्त्वाचे आहे. कधीकधी तुम्हाला फक्त एकाच कृतीचे रक्षण करायचे असते. कदाचित तुम्हाला बटण सक्रिय असतानाच त्याला CSS क्लास जोडायचा असेल, किंवा इनपुट रिकामे नसल्यासच ॲरेमध्ये आयटम ॲपेंड करायचा असेल. एक साधा if स्टेटमेंट तुम्हाला नको असलेले लॉजिक लिहिण्यास भाग पाडत नाही.

if-else सह पर्याय जोडणे

वास्तविक निर्णय सहसा दोन बाजूंचे असतात. एकतर युजर पुरेसा वयाचा आहे, किंवा नाही. एकतर पेमेंट यशस्वी झाले आहे, किंवा ते फेल झाले आहे. if-else स्ट्रक्चर या दोन्ही गोष्टी कव्हर करते.

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

else ब्लॉक पहिल्या कंडिशनने नाकारलेली सर्व गोष्टी पकडतो. हे एक स्वच्छ बायनरी ब्रांच (binary branch) तयार करते. हा पॅटर्न टॉगल्स, परवानग्या (permissions) आणि फीचर फ्लॅग्ससाठी चांगला काम करतो. प्रत्येक ब्लॉकच्या आतील लॉजिकवर लक्ष केंद्रित ठेवा. जर तुम्हाला एकाच ब्रांचमध्ये खूप जास्त टास्क साठवताना आढळले, तर ते सहसा कामाचे लहान फंक्शन्समध्ये विभाजन करण्याचा संकेत आहे.

else if सह अनेक मार्ग तपासणे

जीवन क्वचितच फक्त दोन पर्याय देते. तुम्हाला एखाद्या संख्येचे वर्गीकरण धन (positive), ऋण (negative) किंवा शून्य असे करण्याची गरज पडू शकते. तुम्ही वजनाच्या ब्रॅकेटवर आधारित शिपिंग रेट ठरवू शकता. क्रमाने अनेक तुलना करण्यासाठी else if वापरा.

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

JavaScript हे वरून खाली तपासते. जशी एखादी कंडिशन पास होते, तसा तो ब्लॉक रन होतो आणि बाकीचे दुर्लक्षित केले जाते. क्रम महत्त्वाचा आहे. जर तुम्ही x > 100 तपासल्यानंतर x > 0 तपासले, तर कडक तपासणी (stricter check) कधीच रन होणार नाही कारण सैल तपासणी (looser check) आधीच त्याला पकडेल. 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 conditions) तपासण्यासाठी switch(true) वापरते, जे एक सामान्य JavaScript पॅटर्न आहे जेव्हा तुमचे लॉजिक अचूक समानतेपेक्षा (exact equality) रेंजवर अवलंबून असते. break कीवर्ड आवश्यक आहे. त्याशिवाय, एक्झिक्यूशन मॅच झाले असो वा नसो, पुढच्या केसमध्ये जाते, जे सहसा तुम्हाला हवे नसते. default क्लॉज शेवटच्या else प्रमाणे काम करतो, जो आधीच्या केसेसमध्ये बसत नाही अशा गोष्टींना पकडतो.

जेव्हा तुमच्याकडे स्पष्ट, निश्चित पर्याय असतात तेव्हा switch उत्तम काम करते. else if ब्लॉक्सच्या मोठ्या ढिगाऱ्यापेक्षा ते स्कॅन करणे सहसा सोपे असते, विशेषतः जेव्हा प्रत्येक ब्रांच फक्त एक व्हॅल्यू असाइन करते किंवा एक सिंगल फंक्शन कॉल करते.

Ternary Operator

लहान बायनरी निर्णयांसाठी, ternary operator गोष्टी संक्षिप्त ठेवतो. ते तीन ऑपरँड्स घेते: एक कंडिशन, सत्य असल्यास व्हॅल्यू, आणि असत्य असल्यास व्हॅल्यू.

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

तुम्ही ते जलद असाइनमेंट किंवा इनलाइन रिटर्नसाठी वापरू शकता. जेव्हा निकाल एक साधा एक्सप्रेशन असतो तेव्हा ते चांगले काम करते. टर्नरी ऑपरेटर तीन लेव्हल खोल नेस्ट (nest) करण्याची इच्छा टाळा. नेस्टेड टर्नरीमुळे ओळी वाचू शकतात, पण त्यामुळे वाचनीयता (readability) कमी होते. जेव्हा तुमचे लॉजिक वाढते, तेव्हा if-else ब्लॉक फाइल उघडणाऱ्या पुढच्या डेव्हलपरसाठी सहसा अधिक सोयीचा असतो.

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

गुंतागुंतीच्या लॉजिकसाठी कधीकधी अनुवर्ती प्रश्न विचारण्याची आवश्यकता असते. निर्णय अधिक अचूक करण्यासाठी तुम्ही एका if मध्ये दुसरे if नेस्ट करू शकता.

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