ہر مفید پروگرام آخر کار ایک فیصلے کے مقام پر پہنچتا ہے۔ کیا اس بٹن کو فارم جمع کروانا چاہیے یا کوئی غلطی (error) دکھانی چاہیے؟ کیا یہ صارف ایڈمن ڈیش بورڈ دیکھے گا یا مہمان (guest) ویو؟ جاوا اسکرپٹ (JavaScript) ان سوالات کے جوابات کنڈیشنل سٹیٹمنٹس (conditional statements) کے ذریعے دیتا ہے۔ یہ آپ کے کوڈ کے کنٹرول والوز کی طرح ہیں: ایک راستہ کھولتے ہیں، دوسرا بند کرتے ہیں، اور یہ سب اس بات پر منحصر ہے کہ کوئی ایکسپریشن (expression) true ثابت ہوتی ہے یا false۔ ان کے بغیر، آپ کا اسکرپٹ صارف کے ردعمل کے بغیر اوپر سے نیچے تک چلتا رہے گا۔
سب سے سادہ شاخ: if
if سٹیٹمنٹ وہ پہلا دروازہ ہے جس سے آپ گزرتے ہیں۔ آپ بریکٹ (parentheses) کے اندر ایک شرط (condition) رکھتے ہیں۔ اگر وہ شرط true ثابت ہوتی ہے، تو اس کے نیچے والا کوڈ بلاک چلتا ہے۔ اگر وہ false ثابت ہوتی ہے، تو جاوا اسکرپٹ اس بلاک کو مکمل طور پر چھوڑ دیتا ہے اور فائل میں آگے بڑھ جاتا ہے۔
سادہ اور یک بار ہونے والے چیک کے لیے آپ کو بالکل اسی چیز کی ضرورت ہوتی ہے۔ فرض کریں کہ آپ سرور پر کچھ بھی بھیجنے سے پہلے کسی فارم فیلڈ کی تصدیق (validation) کر رہے ہیں:
const email = document.getElementById("email").value;
if (email === "") {
alert("Please enter your email.");
}
کوئی email نہیں، تو کوئی سبمیشن نہیں۔ یہ منطق (logic) بالکل سادہ اور واضح ہے۔ if کا استعمال تب کریں جب صرف ایک خاص صورتحال سے بچنا ہو اور کسی متبادل عمل کی ضرورت نہ ہو۔
یا تو یہ یا وہ: if...else
زیادہ تر حقیقی فیصلوں کے دو پہلو ہوتے ہیں۔ if...else کا جوڑا بالکل یہی کام کرتا ہے۔ جب شرط true ہو تو ایک بلاک چلتا ہے، اور جب وہ false ہو تو دوسرا چلتا ہے۔ یہ دونوں راستے ایک دوسرے سے الگ (mutually exclusive) ہیں۔
پیج لوڈ ہوتے وقت ڈارک موڈ (dark-mode) کی جانچ کا تصور کریں:
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
if (prefersDark) {
document.body.classList.add("dark");
} else {
document.body.classList.add("light");
}
براؤزر کبھی بھی دونوں کلاسز (classes) شامل نہیں کرے گا۔ یہ ایک راستہ چنے گا، اسے چلائے گا، اور آگے بڑھ جائے گا۔ جب بھی آپ کی منطق دو ممکنہ نتائج میں واضح طور پر تقسیم ہو، تو یہ وہی ڈھانچہ ہے جسے آپ کو استعمال کرنا چاہیے۔
متعدد راستے: if...else if...else
ہر مسئلہ بائنری (binary) نہیں ہوتا۔ کبھی کبھی آپ کو امکانات کی ایک سیڑھی کی ضرورت ہوتی ہے۔ if...else if...else کی زنجیر آپ کو ترتیب وار کئی شرائط کو چیک کرنے کی اجازت دیتی ہے۔ جاوا اسکرپٹ انہیں اوپر سے نیچے تک چیک کرتا ہے اور پہلے اس بلاک کو چلاتا ہے جس کی شرط true ہو۔ اس میچ کے بعد، سیڑھی کے باقی حصوں کو نظر انداز کر دیا جاتا ہے۔
ایک کلاسک مثال نمبر سکور کو لیٹر گریڈ (letter grade) سے جوڑنا ہے:
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 کے زمرے میں پھنس جائے گا کیونکہ پہلا درست میچ جیت جاتا ہے۔ اپنی شرائط کو سب سے زیادہ مخصوص (specific) سے کم مخصوص کی ترتیب میں رکھیں، اور ہمیشہ زنجیر کے آخر میں ایک else لگائیں تاکہ جو کچھ رہ جائے اسے پکڑا جا سکے۔
مقررہ اقدار کا ملاپ: switch
جب آپ ایک ویری ایبل (variable) کا موازنہ معلوم شدہ مستقل اقدار (constants) کی فہرست سے کر رہے ہوں، تو ایک لمبی if...else زنجیر الجھن کا باعث بنتی ہے۔ switch سٹیٹمنٹ چیزوں کو صاف ستھرا کر دیتی ہے۔ یہ ایک ایکسپریشن کو ایک بار چیک کرتی ہے، پھر اسے case لیبلز کے ساتھ 'strict equality' (===) کا استعمال کرتے ہوئے موازنہ کرتی ہے۔ جب آپشنز الگ الگ اور نامزد ہوں تو یہ کوڈ کو پڑھنا آسان بنا دیتا ہے۔
موجودہ دن کی بنیاد پر اسٹور کے اوقات مقرر کرنے پر غور کریں:
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 کے معاملے میں محتاط رہیں۔ اگر آپ اسے چھوڑ دیں گے، تو ایگزیکیوشن (execution) اگلے case پر چلی جائے گی اور چلتی رہے گی۔ یہ رویہ کبھی کبھار مفید ہوتا ہے، لیکن اکثر یہ خاموش بگ (bugs) کا باعث بنتا ہے۔ صحیح طریقے سے استعمال کرنے پر، switch آپ کے مقصد کو ایک نظر میں واضح کر دیتا ہے اور متعلقہ شاخوں کو ایک ترتیب وار کالم میں رکھتا ہے۔
مختصر فیصلے: ٹرنری آپریٹر
ٹرنری آپریٹر—جو ? : کی صورت میں لکھا جاتا ہے—ایک ایکسپریشن ہے، سٹیٹمنٹ نہیں۔ یہ فرق اہمیت رکھتا ہے
