جب آپ کمپیوٹر پروگرام لکھتے ہیں،قطع نظر اس کے کہ آپ کونسی پروگرامنگ زبان استعمال کررہے ہیں ، آپ کو اکثر کچھ پہلے سے طے شدہ معیارات کے مطابق بیانات کے مختلف سیٹوں کو چلانے کی ضرورت ہوتی ہے۔مثال کے طور پر، آپ ایک ایسا پروگرام بنا سکتے ہیں جو کوڈ کا ایک سیٹ صبح اور کوڈ کا دوسرا سیٹ رات کو چلانے کی صلاحیت رکھتا ہے۔یا، آپ ایک ایسا پروگرام بنا سکتے ہیں جو یوزر کی ان پٹ پر انحصار کرتا ہے تاکہ یہ طے کیا جا سکے کہ کون سا کوڈ چلانا ہے۔مثال کے طور پر، فرض کریں کہ آپ ایک ویب پیج بناتے ہیں جس کے ذریعے صارفین آن لائن آرڈر دیتے ہیں۔
اگر کوئی صارف Add to Shopping Cart بٹن پر کلک کرتا ہے تو بیانات کا ایک سیٹ ضرور چلنا چاہیے تاکہ خریدی گئی اشیاء کی ایک فہرست بنائی جا سکے۔تاہم، اگر صارف چیک آؤٹ(Checkout) بٹن پر کلک کرتا ہے، تو لین دین کو مکمل کرنے کے لیے بیانات کا ایک بالکل مختلف سیٹ چلنا ضروری ہے۔ترتیب کی تعین کرنے کا وہ عمل جس میں بیانات کسی پروگرام میں چلائے جاتے ہیں اسے فیصلہ سازی یا فلو کنٹرول کہا جاتا ہے۔فیصلہ سازی کے بیان کی سب سے عام قسم if سٹیٹمنٹ ہے، جس کا مطالعہ آپ مندرجہ ذیل حصے میں کریں گے۔
اگر بیانات if Statements
اگر کسی مشروط ایکسپریشن کی تشخیص درست ویلیو لوٹاتی ہے تو اگر(if) بیان مخصوص پروگرامنگ کوڈ کو چلانے کے لیے استعمال کیا جاتا ہے۔ایک سادہ اگر() سٹیٹمنٹ کا سنٹیکس مندرجہ ذیل ہے.
if بیان میں تین حصے ہوتے ہیں:کی ورڈ if، قوسین کے اندر بند ایک کنڈیشنل ایکسپریشن، اور قابل عمل بیانات۔نوٹ کریں کہ مشروط ایکسپریشن قوسین میں بندہونا چاہیے۔
اگر چیک کی جانے والی شرط TRUE ویلیو لوٹاتی ہےتو کنڈیشنل ایکسپریشن کے فوراً بعد والا بیان عمل میں آتا ہے۔جب if سٹیٹمنٹ اپنے اختیام کو پہنچتی ہے تو پی ایچ پی سکرپٹنگ انجن بعد والا کوڈ روٹین میں چلاتا ہے.درج ذیل کوڈ پر غور کریں۔if اسٹیٹمنٹ برابری (==)کا موازنہ آپریٹر استعمال کرتی ہے تاکہ یہ تعین کیا جا سکے کہ آیا متغیر ExampleVar$ کی ویلیو 5 کے برابر ہے۔چونکہ شرط TRUE ویلیو لوٹاتی ہے، لہذا دو ایکو اسٹیٹمنٹس چلائی جاتی ہیں۔پہلی ایکو سٹیٹمنٹ if سٹیٹمنٹ کی وجہ سے وجود میں آتی ہے کیونکہ کنڈیشن TRUE ویلیو لوٹاتی ہے، اور دوسری ایکو سٹیٹمنٹ if سٹیٹمنٹ مکمل ہونے کے بعد عمل میں آتی ہے۔
اس کے برعکس، درج ذیل کوڈ صرف دوسرا ایکو بیان دکھاتا ہے۔ شرط کا اندازہ FALSE پر ہوتا ہے کیونکہ ExampleVar$ کو 5 کی بجائے 4 کی ویلیو تفویض کی گئی ہے۔
آپ فیصلہ سازی کا ڈھانچہ بنانے کے لیے کمانڈ بلاک کا استعمال کر سکتے ہیں تاکہ سنگل if سٹیٹمنٹ کے ساتھ متعدد بیانات انجام دے سکیں۔کمانڈ بلاک بیانات کا ایک گروپ ہے جو منحنی خطوط وحدانی ({})کے ایک سیٹ کے اندر موجود ہوتا ہے، جس طرح فنکشن اسٹیٹمنٹس منحنی خطوط وحدانی ({})کے ایک سیٹ میں موجود ہوتی ہیں۔ہر کمانڈ بلاک میں ایک افتتاحی منحنی خطوط وحدانی({) اور ایک اختتامی منحنی خطوط وحدانی (}) کا ہونا ضروری ہے۔اگر کمانڈ بلاک میں کوئی ایک بھی منحنی خطوط وحدانی غائب ہو تو غلطی کاامکان لازم ہے.مندرجہ ذیل کوڈ ایک اسکرپٹ کو دکھاتا ہے جو کمانڈ بلاک چلاتا ہے اگر if بیان کے اندر مشروط یکسپریشن شرط کا اندازہ TRUE لگاتا ہے:
جب ایک if سٹیٹمنٹ کمانڈ بلاک پر مشتمل ہوتی ہے تو کمانڈ بلاک میں بیانات اس وقت عمل میں آتے ہیں جب if سٹیٹمنٹ کی شرط TRUE ویلیو کی تشخیص کرتی ہے۔کمانڈ بلاک کے مکمل ہونے کے بعد،عموماََ اس کے بعد آنے والا کوڈ چلتا ہے۔
جب شرط کا اندازہ FALSE ویلیو پر ہوتا ہے، تو کمانڈ بلاک کو چھوڑ دیا جاتا ہے، اور اس کے بعد آنے والے بیانات پر عمل درآمد کیا جاتا ہے۔اگر پچھلے کوڈ میں if سٹیٹمنٹ کے اندر مشروط ایکسپریشن FALSE ویلیو کی تشخیص کرتا ہے، تو صرف کمانڈ بلاک کے بعد والی ایکو سٹیٹمنٹ عمل میں آئے گی۔
اگلے مراحلے میں، آپ ڈائس کے جوڑے کو رول کرنے اور نتائج کا اندازہ کرنے کے لیے ایک اسکرپٹ بنائیں گے۔اس مشق کے لیے، آپ فنکشن rand(1,6) استعمال کریں گے، جو 1 سے 6 تک ایک بے ترتیب عدد پیدا کرتا ہے۔
آئیے ڈائس اسکرپٹ بنائیں:
- اپنے ٹیکسٹ ایڈیٹر میں ایک نئی دستاویز بنائیں اور ٹائٹل ٹیگ میں ٹیکسٹ “ڈائس رول” ٹائپ کریں۔
- دستاویز کے باڈی میں پی ایچ پی ڈیلیمیٹر شامل کریں:
- اسکرپٹ سیکشن کے آغاز میں درج ذیل کوڈ کو شامل کریں۔ یہ FaceNamesSingular$ اور FaceNamesPlural $ ایرے بنائے گا اور انہیں درج ذیل متن کے ساتھ مزین کرے گا۔
- اب CheckForDoubles فنکشن بنائیں۔ یہ دو پیرامیٹرز، Die1 اور Die2 لیتا ہے، اور دو مختلف پیغامات میں سے ایک کو ظاہر کرنے کے لیے echo اسٹیٹمنٹس اور گلوبل FaceNamesSingular$ اور FaceNamesPlural$ ایریز کا استعمال کرتا ہے، یہ اس بات پر منحصر ہے کہ آیا متغیر Die1 برابر ہے متغیر Die2 کے (ڈبل رول کیے گئے تھے).
- اب ()DisplayScoreText فنکشن بنائیں۔ یہ فنکشن ایک پیرامیٹر، Score$ لیتا ہے، اور ایک سٹرنگ دکھاتا ہے جو اس سکور کا خاص نام دکھاتا ہے۔ اس وقت، ()DisplayScoreText فنکشن صرف چند منتخب اسکورز کے لیے پیغام دکھاتا ہے اور دوسروں کے لیے کچھ نہیں دکھاتا ہے۔
- اب []Dice$ ارے کی وضاحت کریں، rand(1,6) فنکشن کا استعمال کرتے ہوئے ایرے کے پہلے دو عناصر کے لیے بے ترتیب ویلیوز پیدا کریں۔ دونوں ویلیوز کو ایک ساتھ شامل کریں اور نتائج کو Score$ متغیر میں اسٹور کریں۔ پھر ایک پیغام دکھائیں جس میں کل سکور دکھایا گیا ہو۔
- آخر میں، []Dice$ ارے کے دو عناصر کو پیرامیٹر کے طور پر استعمال کرتے ہوئے ()CheckForDoubles فنکشن کو کال کریں، اور Score$ متغیر کو پیرامیٹر کے طور پر استعمال کرتے ہوئے ()DisplayScoreText فنکشن کو کال کریں۔
- ویب سرور پر اپنی فائل کو اپ لوڈ کریں اور ویب براؤزر میں کھولیں.
- ویب براؤزر ونڈو کو بند کردیں.
اف …… ایلس بیانات if…else Statements
اب تک، آپ نے یہ سیکھا ہے کہ اگر کسی شرط کا درست اندازہ ہوتا ہے تو کسی بیان (یا بیانات) کو انجام دینے کے لیے if اسٹیٹمنٹ کا استعمال کیسے کریں۔تاہم، کچھ حالات میں، آپ بیانات کے ایک سیٹ پر عمل درآمد کرنا چاہیں گے جب شرط کی تشخیص FALSE کی جائے، اور جب شرط کی تشخیص TRUE کی جائے تو بیانات کے ایک دوسرے سیٹ پر عمل درآمد کرنا چاہیں گے۔ان صورتوں میں، آپ کو اپنے if بیان میں ایک اور else نامی کلاز شامل کرنے کی ضرورت ہے۔مثال کے طور پر، فرض کریں کہ آپ ایک ایسا فارم بناتے ہیں جس میں ایک چیک باکس شامل ہوتا ہے جس پر صارف یہ بتانے کے لیے کلک کرتے ہیں کہ آیا وہ اسٹاک مارکیٹ میں سرمایہ کاری کرنا چاہتے ہیں۔جب صارف فارم کو PHP اسکرپٹ میں منتقل کرتا ہے، تو اسکرپٹ میں if اسٹیٹمنٹ میں ایک مشروط ایکسپریشن ہوسکتا ہے جو صارف کی ان پٹ کا جائزہ لیتا ہے۔اگر دی گئی شرط درست ہوتی ہے (صارف نے چیک باکس پر کلک کیا)،تو if بیان تجویز کردہ اسٹاکس کا ایک ویب پیج دکھاتی ہے۔اگر دی گئی شرط درست نہیں ہے یعنی FALSE ہے (صارف نے چیک باکس پر کلک نہیں کیا)،تو else کلاز میں موجود بیانات کو چلایا جاتا ہے جو صارف کو سرمایہ کاری کے دیگر اقسام کے مواقع کا ایک ویب پیج دکھاتے ہیں۔
ایک if بیان جس میں else کلاز شامل ہو اسے if…else بیان کہا جاتا ہے۔ if…else بیان کا سنٹیکس درج ذیل ہے:
آپif…else سٹیٹمنٹ بنانے کے لیے مندرجہ ذیل کمانڈ بلاکس بھی استعمال کر سکتے ہیں :
درج ذیل کوڈ if…else بیان کی ایک مثال دکھاتا ہے۔
پچھلے کوڈ میں، Today$ متغیر کو “Tuesday” کی ویلیو تفویض کی گئی ہے۔ اگر شرط (“Today == “Monday$) FALSE کی تشخیص کرتی ہے،تو پروگرام کا کنٹرول ایلس کلاز کو منتقل ہو جاتا ہے،تو ایکو بیان سٹرنگ “Today is not Monday” ظاہر کرے گی۔
اگر Today$ کے متغیر کو “Monday” کی ویلیوتفویض کی گئی ہے، تو شرط (“Today == “Monday$) TRUE ویلیو لوٹائے گی، اور ایکو بیان “Today is Monday” ظاہر کرے گی.صرف ایک بیان یا کمانڈ بلاک عمل میں آتا ہے: یا تو وہ اسٹیٹمنٹ یا کمانڈ بلاک جو if اسٹیٹمنٹ کے بعد آتا ہے یا تو وہ اسٹیٹمنٹ یا کمانڈ بلاک else اسٹیٹمنٹ کے بعد آتا ہے۔ قطع نظر اس کے کہ کون سا بیان یا کمانڈ بلاک عمل کرتا ہے، if…else بیانات کے بعد کوئی بھی کوڈ عام طور پر عمل میں آتا ہے.
DiceRoll.php ڈاکومنٹ جو آپ نے پہلے بنایا ہے اپنے پی ایچ پی کوڈ میں متعدد اف(if) بیانات استعمال کرتا ہے if بیانات اس بات کا اندازہ لگاتے ہیں کہ آیا ڈائس رول کا نتیجہ ڈبلز ہوا ہے کہ نہیں۔اگرچہ متعدد if بیانات صحیح طریقے سے کام کرتے ہیں لیکن یہ پیچیدگی پیدا کرتے ہے، ان کو if…else بیان کا استعمال کرکے آسان بنایا جا سکتا ہے۔
DiceRoll.php اسکرپٹ کو آسان بنانے کے لیے دو if بیانات کو ایک if…else بیان سے تبدیل کرتے ہیں:
- اپنے ٹیکسٹ ایڈیٹر میں DiceRoll.php دستاویز پر واپس جائیں۔
- کیونکہ آپ کو ڈبلز کی جانچ کرنے کے لیے صرف if اسٹیٹمنٹ کی ضرورت ہے، آپ ان رولز(rolls) کے لیے else کلاز میں پیغام ڈسپلے کر سکتے ہیں جو ڈبلز نہیں ہیں۔()CheckForDoubles فنکشن میں ترمیم کریں تاکہ دونوں if سٹیٹمنٹس کو سنگل if…else سٹیٹمنٹ سے بدل دیا جائے۔درج ذیل کوڈ سے پتہ چلتا ہے کہ ()CheckForDoubles فنکشن کے بیانات کیسے نظر آنے چاہئیں.
- DiceRoll.php دستاویز کو محفوظ کریں اور اپ لوڈ کریں۔
- اپنے ویب براؤزر میں DiceRoll.php فائل کو کھولیں اور ریفریش بٹن کا استعمال اس بات کی تصدیق کرنے کے لیے کریں کہ ڈبلز اور نان ڈوبلز دونوں صحیح طریقے سے دکھائے گئے ہیں۔
- ویب براؤزر ونڈو کو بند کر دیں.
نیسٹڈ if اور if…else بیانات Nested if and if…else Statements
جیسا کہ آپ نے دیکھا ہے، آپ کنٹرول سٹرکچر استعمال کر سکتے ہیں جیسے کہ if or if…else سٹیٹمنٹ جو پروگرام کو یہ اختیار دیتے ہیں کہ کون سے بیانات پر عمل کرنا ہے۔ تاہم، بعض صورتوں میں، آپ چاہتے ہیں کہ کنٹرول ڈھانچے کے ذریعے عمل میں لائے گئے بیانات دوسرے فیصلے کریں۔ مثال کے طور پر، آپ کے پاس ایک پروگرام ہو سکتا ہے جو صارفین سے یہ پوچھنے کے لیے if بیان کا استعمال کرتا ہے کہ کیا وہ کھیل پسند کرتے ہیں۔اگر صارفین “ہاں” میں جواب دیتے ہیں، تو ہو سکتا ہے کہ آپ کوئی دوسرا if بیان چلانا چاہیں جو صارفین سے پوچھے کہ آیا وہ ٹیم اسپورٹس پسند کرتے ہیں یا انفرادی کھیل۔آپ کسی بھی if or if…else سٹیٹمنٹ کے کوڈ بلاک میں اپنی مرضی کا کوڈ کو شامل کر سکتے ہیں ؛ ان بیانات میں دیگر if یا if…else بیانات شامل ہو سکتے ہیں۔
جب ایک فیصلہ سازی کا بیان دوسرے فیصلہ سازی کے بیان کے اندر موجود ہوتا ہے، تو وہ نیسٹڈ فیصلہ سازی کے ڈھانچے کہلاتے ہیں۔اگر ایک if سٹیٹمنٹ ایک اور if سٹیٹمنٹ کے اندر یا if…else سٹیٹمنٹ کے اندر ہو تو اسے نیسٹڈ if سٹیٹمنٹ کہا جاتا ہے۔اسی طرح، if یا if…else سٹیٹمنٹ کے اندر موجود if…else سٹیٹمنٹ کو نیسٹڈ if…else سٹیٹمنٹ کہا جاتا ہے۔
آپ مشروط تشخیص کے لیے نیسٹڈ if اور if…else بیانات کا استعمال کرتے ہیں جن کو اصل مشروط تشخیص کے بعد عمل میں لایا جانا چاہیے۔مثال کے طور پر، مندرجہ ذیل کوڈ ایکو سٹیٹمنٹ کے چلنے سے پہلے دو مشروط اظہار کی جانچ کرتا ہے۔
پچھلی مثال میں ایکو سٹیٹمنٹ صرف اس صورت میں عمل میں آتی ہے جب دونوں مشروط اظہارات میں if بیانات درستگی کی تشخیص کرتے ہیں۔
DiceRoll.php دستاویز کے ()DisplayScoreText فنکشن میں پی ایچ پی کوڈ کچھ حد تک غیر موثر ہے کیونکہ اس میں if بیانات کی ایک توسیعی سیریز ہے، جن میں سے سبھی پر کارروائی کی ضرورت ہے۔اسی کام کو انجام دینے کا زیادہ موثر طریقہ یہ ہے کہ اسکور کو گروپس میں تقسیم کیا جائے۔مثال کے طور پر، یہ جانچ کر کہ آیا ڈبلز رول کیے گئے ہیں، ہم فہرست کو دو گروپوں میں تقسیم کر سکتے ہیں: ایک اسکور کے ان ناموں کے لیے جو صرف ڈبلز کے لیے ہیں، اور دوسرا اسکور کے ان ناموں کے لیے جو ڈبلز استعمال نہیں ہوتے ہیں۔اگر ڈبلز رول کیے گئے تھے، تو اسٹیٹمنٹ کا if والاحصہ اس کوڈ پر عمل درآمد کرتا ہے جو if اسٹیٹمنٹس کے ایک سیٹ سے ٹیکسٹ کو ڈسپلے کرنے کے لیے منتخب کرتا ہے۔
تاہم، اگر ڈبلز رول نہیں کیے گئے تھے، تو اسٹیٹمنٹ کا else والا حصہ if اسٹیٹمنٹس کے دوسرے گروپ سے ٹیکسٹ کو ڈسپلے کرنے کے لیے منتخب کرے گا۔
DiceRoll.php پروگرام میں ترمیم کرنے کے لیے تاکہ یہ اسکور ٹیکسٹ کو ظاہر کرنے کے لیے نیسٹڈ if…else بیانات کا استعمال کرے:
- اپنے ٹیکسٹ ایڈیٹر میں DiceRoll.php دستاویز پر واپس جائیں۔
- Boolean ویلیو واپس کرنے کے لیے ()CheckForDoubles فنکشن کو درج ذیل متن کے ساتھ تبدیل کریں جس سے یہ ظاہر ہوتا ہے کہ آیا ڈبلز کو رول کیا گیا تھا۔
- دوسرا پیرامیٹر شامل کرنے کے لیے ()DisplayScoreText فنکشن میں ترمیم کریں، جو کہ ایک بولین ویلیو ہے جو درست لوٹاتا ہے اگر ڈبلز رول کیے گئے ہوں اور دوسری صورت میں FALSE۔ ذیل میں دکھایا گیا متن شامل کریں۔
} function DisplayScoreText($Score, $Doubles) - نیسٹڈ if…else بیانات استعمال کرنے کے لیے ()DisplayScoreText فنکشن باڈی میں ترمیم کریں۔نئے Doubles$ بولین پیرامیٹر کا استعمال اس بات کا تعین کرنے کے لیے کریں کہ آیا ڈبلز رول کیے گئے تھے یا نہیں۔ان دو اسکورز کو چیک کریں جو صرف اس صورت میں واقع ہو سکتے ہیں جب اسٹیٹمنٹ کے if والے حصے کے کمانڈ بلاک کے اندر ڈبلز رول کیے گئے ہوں، اور باقی اسٹیٹمنٹ کے else والے حصے کے کمانڈ بلاک میں چیک کریں۔ختم ہونے پر، آپ کا کوڈ اس طرح نظر آنا چاہیے:
- واپسی کی قیمت کو Doubles$ نامی متغیر میں ذخیرہ کرنے کے لیے ()CheckForDoubles فنکشن کال میں ترمیم کریں۔ اس نئی قدر کو دوسرے پیرامیٹر کے طور پر ()DisplayScoreText فنکشن میں منتقل کریں۔ کوڈ مندرجہ ذیل طور پر ظاہر ہونا چاہئے:
- DiceRoll.php دستاویز کو محفوظ کریں اور دستاویز کو ویب سرور پر اپ لوڈ کرنے کے بعد ویب براؤزر میں کھولیں۔
- ویب براؤزر ونڈو کو بند کر دیں.
مثال کی وضاحت
- Coffee
- Tea
- Milk
- Coffee
- Tea
- Milk