प्रत्येक उपयुक्त प्रोग्राम शेवटी एका निर्णयाच्या टप्प्यावर पोहोचतो. या बटणाने फॉर्म सबमिट करावा की त्रुटी (error) दाखवावी? या वापरकर्त्याला ॲडमिन डॅशबोर्ड दिसावा की गेस्ट व्ह्यू? JavaScript या प्रश्नांची उत्तरे 'कंडिशनल स्टेटमेंट्स' (conditional statements) द्वारे देते. ते तुमच्या कोडचे नियंत्रण व्हॉल्व्ह (control valves) आहेत: एखादे एक्सप्रेशन true किंवा false आहे की नाही यावर आधारित, ते एक मार्ग उघडतात आणि दुसरा बंद करतात. त्यांच्याशिवाय, तुमचा स्क्रिप्ट वापरकर्त्याच्या कृतीला प्रतिसाद न देता वरून खाली सरळ चालत राहील.
सर्वात सोपा मार्ग: if
if स्टेटमेंट हे पहिले प्रवेशद्वार आहे ज्यातून तुम्ही जाता. तुम्ही कंसात (parentheses) एक अट (condition) ठेवता. जर ती अट true ठरली, तर त्याखालील कोड ब्लॉक कार्यान्वित होतो. जर ती false ठरली, तर JavaScript तो ब्लॉक पूर्णपणे वगळते आणि फाईलमध्ये पुढे जाते.
साध्या, एकदाच केल्या जाणाऱ्या तपासणीसाठी तुम्हाला याचीच गरज असते. सर्व्हरवर काहीही पाठवण्यापूर्वी फॉर्ममधील एखादे फील्ड व्हॅलिडेट (validate) करणे अपेक्षित आहे असे समजा:
const email = document.getElementById("email").value;
if (email === "") {
alert("Please enter your email.");
}
email नसेल तर सबमिशन होणार नाही. हे लॉजिक सरळ आणि स्पष्ट आहे. जेव्हा फक्त एकच विशेष परिस्थिती टाळायची असते आणि इतर कोणत्याही पर्यायी कृतीची गरज नसते, तेव्हा if वापरा.
'एकतर किंवा दुसरे' हाताळणे: if...else
बहुतेक वास्तविक निर्णयांचे दोन बाजू असतात. if...else जोडी नेमके तेच करते. अट true असताना एक ब्लॉक चालतो आणि false असताना दुसरा ब्लॉक चालतो. हे दोन्ही मार्ग एकमेकांपासून वेगळे (mutually exclusive) असतात.
पेज लोड होताना डार्क-मोड तपासणीचे उदाहरण पहा:
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
if (prefersDark) {
document.body.classList.add("dark");
} else {
document.body.classList.add("light");
}
ब्राउझर कधीही दोन्ही क्लासेस एकत्र जोडणार नाही. तो एक मार्ग निवडतो, तो कार्यान्वित करतो आणि पुढे जातो. जेव्हा तुमचे लॉजिक दोन संभाव्य परिणामांमध्ये स्पष्टपणे विभागले जाते, तेव्हा ही रचना वापरावी.
अनेक मार्ग: if...else if...else
प्रत्येक समस्या 'बायनरी' (binary) नसते. कधीकधी तुम्हाला शक्यतांची एक शिडी (ladder of possibilities) लागते. if...else if...else साखळी तुम्हाला एकापाठोपाठ एक अनेक अटी तपासू देते. JavaScript वरून खाली या क्रमाने त्यांचे मूल्यमापन करते आणि ज्या ब्लॉकची अट true आहे, तो पहिला ब्लॉक कार्यान्वित करते. एकदा मॅच मिळाल्यावर, उर्वरित साखळी दुर्लक्षित केली जाते.
संख्यात्मक स्कोअरचे लेटर ग्रेडमध्ये रूपांतर करणे हे याचे एक क्लासिक उदाहरण आहे:
const score = 87;
let grade;
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else {
grade = "F";
}
येथे क्रम अत्यंत महत्त्वाचा आहे. जर तुम्ही score >= 90 च्या आधी score >= 70 तपासले, तर जवळजवळ सर्व पास होणारे ग्रेड C मध्येच अडकतील, कारण जो पहिला मॅच true होईल तोच निवडला जातो. तुमच्या अटी सर्वात विशिष्ट (most specific) पासून सर्वात कमी विशिष्ट (least specific) या क्रमाने ठेवा आणि काही सुटून गेल्यास ते पकडण्यासाठी साखळीच्या शेवटी नेहमी else वापरा.
निश्चित मूल्ये मॅच करणे: switch
जेव्हा तुम्ही एका व्हेरिएबलची तुलना ज्ञात स्थिराकांच्या (constants) सूचीशी करत असता, तेव्हा लांब if...else साखळी गोंधळ निर्माण करू शकते. switch स्टेटमेंट गोष्टी सुटसुटीत करते. ते एकदा एक्सप्रेशनचे मूल्यमापन करते आणि नंतर 'strict equality' (===) वापरून त्याची तुलना case लेबल्सशी करते. जेव्हा पर्याय स्वतंत्र आणि नावांकित असतात, तेव्हा यामुळे कोड वाचणे सोपे होते.
सध्याच्या दिवसाच्या आधारे स्टोअरची वेळ सेट करण्याचा विचार करा:
const day = new Date().getDay();
switch (day) {
case 0:
console.log("Sunday hours: 10am - 4pm");
break;
case 6:
console.log("Saturday hours: 9am - 6pm");
break;
default:
console.log("Weekday hours: 8am - 8pm");
}
break वापरताना काळजी घ्या. जर तुम्ही ते विसरलात, तर एक्झिक्युशन पुढच्या case कडे सरकते आणि चालू राहते. हे वर्तन कधीकधी उपयुक्त असते, परंतु बहुतेक वेळा यामुळे 'सायलेंट बग्स' (silent bugs) निर्माण होतात. योग्यरित्या वापरल्यास, switch तुमचा हेतू एका नजरेत स्पष्ट करते आणि संबंधित शाखा एका सुव्यवस्थित कॉलममध्ये ठेवते.
संक्षिप्त निर्णय: द टेरनरी ऑपरेटर
टेरनरी ऑपरेटर—जो ? : असा लिहिला जातो—तो एक 'expression' आहे, 'statement' नाही. हा फरक महत्त्वाचा आहे.
