Control flow
کمپیوٹر سائنس میں، کنٹرول فلو (یا کنٹرول کا بہاؤ) وہ ترتیب ہے جس میں کسی لازمی پروگرام کے انفرادی بیانات، ہدایات یا فنکشن کالز کو انجام دیا جاتا ہے یا ان کا جائزہ لیا جاتا ہے۔ واضح کنٹرول فلو پر زور ایک لازمی پروگرامنگ زبان کو اعلانیہ پروگرامنگ زبان سے ممتاز کرتا ہے۔ ایک لازمی پروگرامنگ زبان کے اندر، کنٹرول فلو بیان ایک بیان ہے جس کے نتیجے میں یہ انتخاب کیا جاتا ہے کہ دو یا زیادہ راستوں میں سے کس پر عمل کرنا ہے۔ غیر سخت فعال زبانوں کے لیے، ایک ہی نتیجہ حاصل کرنے کے لیے افعال اور زبان کی تعمیرات موجود ہیں، لیکن انہیں عام طور پر کنٹرول فلو اسٹیٹمنٹ نہیں کہا جاتا ہے۔ بیانات کا ایک مجموعہ بدلے میں عام طور پر ایک بلاک کے طور پر تشکیل دیا جاتا ہے، جو گروہ بندی کے علاوہ، لفظی دائرہ کار کی بھی وضاحت کرتا ہے۔ رکاوٹیں اور سگنلز نچلے درجے کے میکانزم ہیں جو کنٹرول کے بہاؤ کو سبروٹین کی طرح تبدیل کر سکتے ہیں، لیکن عام طور پر ان لائن کنٹرول فلو سٹیٹمنٹ پر عمل درآمد کے بجائے کسی بیرونی محرک یا واقعہ (جو غیر متزلزل طور پر ہو سکتا ہے) کے ردعمل کے طور پر ہوتا ہے۔ مشین لینگویج یا اسمبلی لینگویج کی سطح پر، کنٹرول فلو ہدایات عام طور پر پروگرام کاؤنٹر کو تبدیل کرکے کام کرتی ہیں۔ کچھ سنٹرل پروسیسنگ یونٹس (سی پی یوز) کے لیے، صرف کنٹرول فلو ہدایات دستیاب ہیں جو مشروط یا غیر مشروط برانچ ہدایات ہیں، جنہیں جمپ بھی کہا جاتا ہے۔ زمرہ جات مختلف زبانوں کے تعاون سے چلنے والے کنٹرول فلو بیانات کی اقسام مختلف ہوتی ہیں، لیکن ان کے اثر کے لحاظ سے درجہ بندی کی جا سکتی ہے: مختلف بیان پر تسلسل (غیر مشروط برانچ یا جمپ) بیانات کے ایک سیٹ کو صرف اس صورت میں انجام دینا جب کچھ شرائط پوری ہو جائیں (انتخاب-یعنی مشروط برانچ) بیانات کے ایک سیٹ کو صفر یا اس سے زیادہ بار انجام دینا، جب تک کہ کچھ شرائط پوری نہ ہو جائیں (یعنی لوپ-مشروط برانچ کی طرح) دور کے بیانات کے ایک سیٹ کو انجام دینا، جس کے بعد کنٹرول کا بہاؤ عام طور پر واپس آتا ہے (ذیلی روٹین، کروٹین اور تسلسل) پروگرام کو روکنا، مزید کسی عمل کو روکنا (غیر مشروط رکنا) ابتدائی لیبل ایک لیبل ایک واضح نام یا نمبر ہے جو اس کے اندر ایک مقررہ پوزیشن کو تفویض کیا جاتا ہے۔ ایک لیبل سورس کوڈ کے اندر کسی پوزیشن کو نشان زد کرتا ہے اور اس کا کوئی دوسرا اثر نہیں ہوتا ہے۔ لائن نمبر کچھ زبانوں (جیسے بیسک) میں استعمال ہونے والے نامی لیبل کا متبادل ہیں۔ وہ پورے نمبر ہوتے ہیں جو سورس کوڈ میں متن کی ہر لائن کے آغاز میں رکھے جاتے ہیں۔ وہ زبانیں جو ان کا استعمال کرتی ہیں اکثر یہ رکاوٹ عائد کرتی ہیں کہ لائن نمبروں کو مندرجہ ذیل ہر لائن میں قدر میں اضافہ کرنا چاہیے، لیکن یہ ضروری نہیں ہے کہ وہ لگاتار ہوں۔ مثال کے طور پر، بنیادی میں: 10 لیٹ ایکس = 3 20 پرنٹ ایکس دوسری زبانوں جیسے سی اور اڈا میں، لیبل ایک شناخت کنندہ ہے، جو عام طور پر لائن کے آغاز میں ظاہر ہوتا ہے اور اس کے فورا بعد کالون آتا ہے۔ مثال کے طور پر، سی میں: کامیابی: پرنٹ ایف ("آپریشن کامیاب رہا۔ \n") ؛ زبان ALGOL 60 نے پورے نمبروں اور شناخت کاروں دونوں کو لیبل کے طور پر اجازت دی (دونوں کو کولون کے ذریعے درج ذیل بیان سے منسلک کیا گیا ہے)، لیکن اگر کسی دوسرے ALGOL متغیرات نے پورے نمبروں کی اجازت دی ہے تو بہت کم۔ ابتدائی فورٹرن مرتب کرنے والوں نے صرف پورے نمبروں کو لیبل کے طور پر اجازت دی۔ فورٹرن-90 سے شروع کرتے ہوئے، حرفی ہندسوں کے لیبل کی بھی اجازت دی گئی ہے۔ گوٹو بیان (انگریزی الفاظ کا مجموعہ اور اس کے مطابق تلفظ) کنٹرول کی غیر مشروط منتقلی کی سب سے بنیادی شکل ہے۔ اگرچہ کلیدی لفظ زبان کے لحاظ سے یا تو اوپری یا نچلے کیس میں ہو سکتا ہے، لیکن اسے عام طور پر اس طرح لکھا جاتا ہے: گوٹو لیبل۔ گوٹو بیان کا اثر اگلے بیان پر عمل درآمد کا سبب بنتا ہے جو اشارہ کردہ لیبل پر (یا اس کے فورا بعد) ظاہر ہوتا ہے۔ گوٹو کے بیانات کو بہت سے کمپیوٹر سائنسدانوں، خاص طور پر ڈیجسٹرا نے نقصان دہ سمجھا ہے۔ سبروٹینز سبروٹینز کی اصطلاحات مختلف ہوتی ہیں۔ انہیں متبادل طور پر معمولات، طریقہ کار، افعال (خاص طور پر اگر وہ نتائج واپس کرتے ہیں) یا طریقوں (خاص طور پر اگر وہ کلاسوں یا ٹائپ کلاسوں سے تعلق رکھتے ہیں) کے نام سے جانا جا سکتا ہے۔ 1950 کی دہائی میں، کمپیوٹر کی یادیں موجودہ معیار کے لحاظ سے بہت چھوٹی تھیں لہذا سبروٹینز کو بنیادی طور پر پروگرام کے سائز کو کم کرنے کے لیے استعمال کیا جاتا تھا۔ کوڈ کا ایک ٹکڑا ایک بار لکھا جاتا تھا اور پھر پروگرام میں مختلف دوسری جگہوں سے کئی بار استعمال کیا جاتا تھا۔ آج کل، سبروٹینز کو اکثر کسی پروگرام کو زیادہ منظم بنانے میں مدد کے لیے استعمال کیا جاتا ہے، مثال کے طور پر، کچھ الگورتھم کو الگ کرکے یا ڈیٹا تک رسائی کے کچھ طریقے کو چھپا کر۔ اگر بہت سے پروگرامر ایک پروگرام پر کام کر رہے ہیں، تو سبروٹین ایک قسم کی ماڈیولرٹی ہے جو کام کو تقسیم کرنے میں مدد کر سکتی ہے۔ منظم پروگرامنگ میں، یکے بعد دیگرے کمانڈوں کی ترتیب شدہ ترتیب کو بنیادی کنٹرول ڈھانچوں میں سے ایک سمجھا جاتا ہے، جو تکرار، تکرار اور انتخاب کے ساتھ ساتھ پروگراموں کے لیے بلڈنگ بلاک کے طور پر استعمال ہوتا ہے۔ مئی 1966 میں، بوہم اور جیکوپینی نے کمیونیکیشنز آف اے سی ایم میں ایک مضمون شائع کیا جس میں دکھایا گیا کہ گوٹو کے ساتھ کسی بھی پروگرام کو گوٹو فری فارم میں تبدیل کیا جا سکتا ہے جس میں صرف انتخاب (آئی ایف تھین ایلس) اور لوپس (ڈبلیو ایچ آئی ایل ای کنڈیشن ڈی او ایکس ایکس) شامل ہیں، ممکنہ طور پر ڈپلیکیٹڈ کوڈ اور/یا بولین متغیرات (سچ/غلط پرچم) کے اضافے کے ساتھ۔ بعد کے مصنفین نے دکھایا کہ انتخاب کو لوپس (اور ابھی تک مزید بولین متغیرات) سے تبدیل کیا جا سکتا ہے۔ یہ کہ اس طرح کی کم از کمیت ممکن ہے اس کا مطلب یہ نہیں ہے کہ یہ لازمی طور پر مطلوب ہے۔ آخر کار، کمپیوٹرز کو نظریاتی طور پر صرف ایک مشین انسٹرکشن کی ضرورت ہوتی ہے (ایک نمبر کو دوسرے سے گھٹا دیں اور اگر نتیجہ منفی ہو تو برانچ کریں)، لیکن عملی کمپیوٹرز میں درجنوں یا یہاں تک کہ سینکڑوں مشین انسٹرکشنز ہوتے ہیں۔ بوہم اور جیکوپینی کے مضمون میں جو دکھایا گیا وہ یہ تھا کہ تمام پروگرام گوٹو فری ہو سکتے ہیں۔ دیگر تحقیقات سے پتہ چلتا ہے کہ ایک اندراج اور ایک اخراج کے ساتھ کنٹرول ڈھانچے کو کسی بھی دوسری شکل کے مقابلے میں سمجھنا بہت آسان تھا، بنیادی طور پر اس وجہ سے کہ انہیں کنٹرول کے بہاؤ میں خلل ڈالے بغیر کہیں بھی بیان کے طور پر استعمال کیا جا سکتا ہے۔ دوسرے لفظوں میں، وہ قابل اطمینان تھے۔ (بعد کی پیش رفت، جیسے کہ غیر سخت پروگرامنگ زبانیں-اور حال ہی میں، کمپوز ایبل سافٹ ویئر ٹرانزیکشنز-نے اس حکمت عملی کو جاری رکھا ہے، جس سے پروگراموں کے اجزاء اور بھی زیادہ آزادانہ طور پر کمپوز ایبل ہو گئے ہیں۔) کچھ ماہرین تعلیم نے بوہم-جیکوپینی کے نتیجے پر ایک خالص نقطہ نظر اختیار کیا اور استدلال کیا کہ لوپس کے بیچ سے وقفہ اور واپسی جیسی ہدایات بھی برا عمل ہیں کیونکہ بوہم-جیکوپینی ثبوت میں ان کی ضرورت نہیں ہے، اور اس طرح انہوں نے اس بات کی وکالت کی کہ تمام لوپس میں ایک ہی خارجی نقطہ ہونا چاہیے۔ یہ خالص نقطہ نظر پاسکل زبان (1968-1969 میں ڈیزائن کیا گیا) میں مجسم ہے، جو 1990 کی دہائی کے وسط تک اکیڈمیا میں تعارفی پروگرامنگ کی تعلیم کے لیے ترجیحی ذریعہ تھا۔ بوہم-جیکوپینی تھیوریم کے براہ راست اطلاق کے نتیجے میں ساختی چارٹ میں اضافی مقامی متغیرات متعارف کرائے جا سکتے ہیں، اور اس کے نتیجے میں کچھ کوڈ کی نقل بھی ہو سکتی ہے۔ پاسکل ان دونوں مسائل سے متاثر ہوتا ہے اور ایرک ایس رابرٹس کے حوالہ کردہ تجرباتی مطالعات کے مطابق، طلباء پروگرامرز کو پاسکل میں کئی آسان مسائل کے درست حل وضع کرنے میں دشواری کا سامنا کرنا پڑا، بشمول صف میں کسی عنصر کو تلاش کرنے کے لیے فنکشن لکھنا۔ 1980 میں ہنری شاپیرو کے ایک مطالعے کا حوالہ رابرٹس نے دیا کہ صرف پاسکل کے فراہم کردہ کنٹرول ڈھانچے کا استعمال کرتے ہوئے، صرف 20 فیصد مضامین نے صحیح حل دیا، جبکہ کسی بھی مضمون نے اس مسئلے کے لیے غلط کوڈ نہیں لکھا اگر اسے لوپ کے وسط سے ریٹرن لکھنے کی اجازت دی جائے۔ عملی طور پر کنٹرول ڈھانچے کنٹرول ڈھانچے والی زیادہ تر پروگرامنگ زبانوں میں ایک ابتدائی کلیدی لفظ ہوتا ہے جو اس میں شامل کنٹرول ڈھانچے کی قسم کی نشاندہی کرتا ہے۔ اس کے بعد زبانیں تقسیم ہوتی ہیں کہ آیا کنٹرول ڈھانچے میں حتمی کلیدی لفظ ہے یا نہیں۔ کوئی حتمی کلیدی لفظ نہیں: ALGOL 60، C، C + +، ہاسکل، جاوا، پاسکل، پرل، PHP، PL/I، ازگر، پاور شیل۔ اس طرح کی زبانوں کو بیانات کو ایک ساتھ گروپ کرنے کے کسی نہ کسی طریقے کی ضرورت ہوتی ہے: ALGOL 60 اور پاسکل: شروع کریں. C، C + +، جاوا، پرل، PHP، اور پاور شیل: گھوبگھرالی بریکٹ۔ حتمی مطلوبہ الفاظ کی شکلیں مختلف ہوتی ہیں: اڈا: حتمی مطلوبہ الفاظ اینڈ + اسپیس + ابتدائی مطلوبہ الفاظ جیسے کہ، اگر. اینڈ اگر، لوپ. اینڈ لوپ اے پی ایل: حتمی مطلوبہ الفاظ یہ ہیں: اختیاری طور پر اینڈ + ابتدائی مطلوبہ الفاظ، مثال کے طور پر: اگر.: اینڈ یا: اگر.: اینڈ آئی ایف، سلیکٹ۔: اینڈ یا: سلیکٹ۔: اینڈ سلیکٹ، تاہم، اگر اختتامی شرط کو شامل کیا جائے تو، آخری مطلوبہ الفاظ بن جاتا ہے: ALGOL 68 تک، میتھریل: ابتدائی مطلوبہ الفاظ کی ہجے پیچھے کی طرف، مثال کے طور پر، اگر. فائی، کیس. ایس اے سی فورٹرن 77: حتمی مطلوبہ الفاظ اینڈ + ابتدائی مطلوبہ الفاظ جیسے کہ، آئی ایف۔ اینڈ آئی ایف، ڈی او۔ اینڈ۔ اگر۔ اگر ختم کریں۔ اگلا۔ کرو۔ لوپ ؛ جبکہ۔ وینڈ چوائس اگر-تو-(دیگر) بیانات مشروط تاثرات اور مشروط تعمیرات ایک پروگرامنگ زبان کی خصوصیات ہیں جو اس بات پر منحصر ہے کہ پروگرامر کی طرف سے متعین بولین حالت صحیح یا غلط کا اندازہ کرتی ہے یا نہیں۔ IF.GOTO۔ غیر ساختہ زبانوں میں پایا جانے والا فارم، ایک عام مشین کوڈ کی ہدایت کی نقل کرتے ہوئے، شرط پوری ہونے پر لیبل یا لائن نمبر (جی او ٹی او) پر کود جائے گا۔ IF.THEN. (ENDIF)۔ چھلانگ تک محدود رہنے کے بجائے، کوئی بھی سادہ بیان، یا نیسٹڈ بلاک، تھین کلیدی مطلوبہ الفاظ کی پیروی کر سکتا ہے۔ یہ ایک منظم شکل ہے۔ IF.THEN.ELSE. (ENDIF)۔ جیسا کہ اوپر بتایا گیا ہے، لیکن دوسری کارروائی کے ساتھ اگر شرط غلط ہے۔ یہ بہت سے تغیرات کے ساتھ سب سے عام شکلوں میں سے ایک ہے۔ کچھ کو ٹرمینل ENDIF کی ضرورت ہوتی ہے، دوسروں کو نہیں۔ سی اور متعلقہ زبانوں کو ٹرمینل مطلوبہ الفاظ، یا 'تب' کی ضرورت نہیں ہے، لیکن حالت کے ارد گرد قوسین کی ضرورت ہوتی ہے۔ مشروط بیانات دوسرے مشروط بیانات کے اندر ہو سکتے ہیں اور اکثر ہوتے ہیں۔ کچھ زبانیں ELSE اور IF کو ELSEIF میں جوڑنے کی اجازت دیتی ہیں، مرکب بیان کے آخر میں ENDIF یا دیگر حتمی بیانات کی سیریز رکھنے کی ضرورت سے گریز کرتی ہیں۔ کم عام تغیرات میں شامل ہیں: کچھ زبانیں، جیسے فورٹرن، میں تین طرفہ یا ریاضی ہوتی ہے اگر، یہ جانچتے ہوئے کہ آیا عددی قدر مثبت، منفی یا صفر ہے۔ کچھ زبانوں میں آئی ایف بیان کی ایک فعال شکل ہوتی ہے، مثال کے طور پر Lisp 's Cond۔ کچھ زبانوں میں آئی ایف بیان کی آپریٹر شکل ہوتی ہے، جیسے کہ سی کا ٹرنیری آپریٹر۔ پرل سی-سٹائل کی تکمیل کرتا ہے اگر کب اور جب تک نہیں۔ سمال ٹاک کسی بھی بنیادی زبان کی تعمیر کے بجائے شرائط کو نافذ کرنے کے لیے آئی ایف ٹرو اور آئی ایف فالس پیغامات کا استعمال کرتا ہے۔ کیس اور سوئچ کے بیانات تبدیل کے بیانات (یا کیس کے بیانات، یا ملٹی وے برانچز) ایک دی گئی قدر کا مخصوص مستقل کے ساتھ موازنہ کرتے ہیں اور ملنے والے پہلے مستقل کے مطابق کارروائی کرتے ہیں۔ اگر کوئی میچ کامیاب نہیں ہوتا ہے تو عام طور پر ڈیفالٹ ایکشن ("بصورت دیگر"، "بصورت دیگر") کا التزام ہوتا ہے۔ تبدیل شدہ بیانات مرتب کرنے والے کی اصلاح کی اجازت دے سکتے ہیں، جیسے کہ تلاش کی میزیں۔ متحرک زبانوں میں، معاملات مستقل تاثرات تک محدود نہیں ہو سکتے ہیں، اور پیٹرن میچنگ تک پھیل سکتے ہیں، جیسا کہ دائیں طرف شیل اسکرپٹ کی مثال میں ہے، جہاں *) کسی بھی سٹرنگ سے ملنے والے گلوب کے طور پر ڈیفالٹ کیس کو لاگو کرتا ہے۔ کیس منطق کو فنکشنل شکل میں بھی لاگو کیا جا سکتا ہے، جیسا کہ ایس کیو ایل کے ڈی کوڈ بیان میں ہوتا ہے۔ لوپس ایک لوپ بیانات کا ایک سلسلہ ہے جو ایک بار متعین کیا جاتا ہے لیکن جو یکے بعد دیگرے کئی بار انجام دیا جا سکتا ہے۔ کوڈ "لوپ کے اندر" (لوپ کا باڈی، جو نیچے XXX کے طور پر دکھایا گیا ہے) کی ایک مخصوص تعداد میں اطاعت کی جاتی ہے، یا اشیاء کے ہر مجموعہ کے لیے ایک بار، یا جب تک کہ کچھ شرائط پوری نہ ہو جائیں، یا غیر معینہ مدت تک۔ فنکشنل پروگرامنگ زبانوں میں، جیسے کہ ہاسکل اور اسکیم، تکراری اور تکراری دونوں عمل کا اظہار لوپنگ تعمیرات کے بجائے دم تکراری طریقہ کار کے ساتھ کیا جاتا ہے جو نحو ہیں۔ زیادہ تر پروگرامنگ زبانوں میں لوپ کو ایک مخصوص تعداد میں دہرانے کے لیے تعمیرات ہوتی ہیں۔ زیادہ تر معاملات میں گنتی اوپر کی بجائے نیچے کی طرف جا سکتی ہے اور 1 کے علاوہ اسٹیپ سائز استعمال کیے جا سکتے ہیں۔ ان مثالوں میں، اگر N <1 ہے تو پروگرامنگ زبان کے لحاظ سے باڈی آف لوپ ایک بار چل سکتا ہے (I کی ویلیو 1 کے ساتھ) یا بالکل نہیں۔ بہت سی پروگرامنگ زبانوں میں، کاؤنٹ کنٹرولڈ لوپ میں صرف انٹیجرز کو قابل اعتماد طریقے سے استعمال کیا جا سکتا ہے۔ فلوٹنگ پوائنٹ نمبروں کی نمائندگی ہارڈ ویئر کی رکاوٹوں کی وجہ سے قطعی طور پر نہیں کی جاتی ہے، لہذا ایک لوپ جیسے کہ X: = 0.1 قدم 0.1 سے 1.1 ڈو کو گول غلطیوں اور/یا ہارڈ ویئر اور/یا مرتب ورژن کے لحاظ سے 9 یا 10 بار دہرایا جا سکتا ہے۔ مزید برآں، اگر X کا اضافہ بار بار اضافے سے ہوتا ہے، تو جمع شدہ گول غلطیوں کا مطلب یہ ہو سکتا ہے کہ ہر تکرار میں X کی قیمت متوقع ترتیب 0.1، 0.2، 0.3، 0.1 سے کافی حد تک مختلف ہو سکتی ہے۔ کنڈیشن کنٹرولڈ لوپس زیادہ تر پروگرامنگ زبانوں میں لوپ کو دہرانے کی تعمیرات ہوتی ہیں جب تک کہ کچھ کنڈیشن تبدیل نہ ہو جائیں۔ کچھ تغیرات لوپ کے آغاز میں حالت کی جانچ کرتے ہیں ؛ دوسرے آخر میں اس کی جانچ کرتے ہیں۔ اگر ٹیسٹ شروع میں ہوتا ہے، تو جسم کو مکمل طور پر چھوڑ دیا جا سکتا ہے ؛ اگر یہ آخر میں ہوتا ہے، تو جسم کو ہمیشہ کم از کم ایک بار پھانسی دی جاتی ہے۔ کنٹرول بریک قدر کی تبدیلی کا پتہ لگانے کا ایک طریقہ ہے جو اقدار کے گروپوں کے لیے پروسیسنگ کو متحرک کرنے کے لیے عام لوپس کے اندر استعمال ہوتا ہے۔ لوپ کے اندر اقدار کی نگرانی کی جاتی ہے اور ایک تبدیلی ان سے وابستہ گروپ ایونٹ کو سنبھالنے کے لیے پروگرام کے بہاؤ کو موڑ دیتی ہے۔ ڈو یونٹل (فائل کا اختتام) اگر نیا-زپ کوڈ <> موجودہ-زپ کوڈ ڈسپلے _ ٹیلی (موجودہ-زپ کوڈ، زپ کاؤنٹ) موجودہ-زپ کوڈ = نیا-زپ کوڈ زپ کاؤنٹ = 0 ای این ڈی آئی ایف زپ کاؤنٹ + + ایل او او پی کلیکشن کنٹرولڈ لوپس متعدد پروگرامنگ زبانیں (جیسے، اڈا، ڈی، سی + + 11، سمال ٹاک، پی ایچ پی، پرل، آبجیکٹ پاسکل، جاوا، سی #، میٹ لیب، ویژول بیسک، روبی، ازگر، جاوا اسکرپٹ، فورٹرن 95 اور اس کے بعد کے) میں خصوصی تعمیرات ہیں جو کسی صف کے تمام عناصر، یا تمام کے ذریعے مضمر لوپنگ کی اجازت دیتی ہیں۔ کچھ مجموعہ کریں: [: eachElement |xxx]۔ کلیکشن میں آئٹم کے لیے XXX اینڈ شروع کریں۔ فورچ (آئٹم ؛ مائی کلیکشن) {XXX} کچھ آرری {XXX} فورچ ($کچھ آرری کے طور پر $k => $v) {XXX} کلیکشن <سٹرنگ> کول ؛ کے لیے (سٹرنگ s: کول) {} فورچ (سٹرنگ s میرے سٹرنگ کلیکشن میں) {XXX} کچھ کلیکشن | ہر ایک کے لیے-آبجیکٹ {$_} فار آل (انڈیکس = پہلا: آخری: مرحلہ۔) اسکالا میں تاثرات ہوتے ہیں، جو کلیکشن کنٹرولڈ لوپس کو عام کرتے ہیں، اور دیگر استعمالات کی بھی حمایت کرتے ہیں، جیسے کہ اسنکرونس پروگرامنگ۔ ہاسکل کے پاس اظہارات اور فہمیاں ہیں، جو مل کر اسکالا میں اظہارات کے لیے اسی طرح کا کام فراہم کرتی ہیں۔ عمومی تکرار عام تکرار کی تعمیرات جیسے کہ C کا بیان اور کامن Lisp کا ڈو فارم مذکورہ بالا قسم کے کسی بھی قسم کے لوپ کو ظاہر کرنے کے لیے استعمال کیا جا سکتا ہے، اور دیگر، جیسے کہ متوازی طور پر کچھ تعداد میں مجموعوں پر لوپنگ۔ جہاں ایک زیادہ مخصوص لوپنگ کنسٹرکٹ استعمال کیا جا سکتا ہے، اسے عام طور پر عمومی تکرار کی تعمیر پر ترجیح دی جاتی ہے، کیونکہ یہ اکثر اظہار کے مقصد کو واضح کرتا ہے۔ لامحدود لوپس کا استعمال پروگرام کے حصے کے لوپس کو ہمیشہ کے لیے یا اس وقت تک یقینی بنانے کے لیے کیا جاتا ہے جب تک کہ کوئی غیر معمولی حالت پیدا نہ ہو، جیسے کہ کوئی غلطی۔ مثال کے طور پر، ایونٹ سے چلنے والے پروگرام (جیسے سرور) کو ہمیشہ کے لیے لوپ ہونا چاہیے، واقعات کو سنبھالنا چاہیے جیسا کہ وہ ہوتے ہیں، صرف اس وقت رکنا چاہیے جب آپریٹر کے ذریعے عمل ختم ہو جائے۔ لامحدود لوپس کو دیگر کنٹرول فلو تعمیرات کا استعمال کرتے ہوئے لاگو کیا جا سکتا ہے۔ زیادہ تر عام طور پر، غیر ساختہ پروگرامنگ میں یہ جمپ بیک اپ (گوٹو) ہوتا ہے، جبکہ ساختہ پروگرامنگ میں یہ ایک غیر معینہ مدت کا لوپ (جبکہ لوپ) ہے جو کبھی ختم نہیں ہونے کے لیے سیٹ کیا جاتا ہے، یا تو شرط کو چھوڑ کر یا واضح طور پر اسے سچ پر ترتیب دے کر، جیسے کہ جبکہ (سچ)۔ کچھ زبانوں میں لامحدود لوپس کے لیے خصوصی تعمیرات ہوتی ہیں، عام طور پر غیر معینہ مدت کے لوپ سے شرط کو چھوڑ کر۔ مثالوں میں اڈا (لوپ. اینڈ لوپ)، فورٹرن (ڈی او۔ اینڈ ڈی او)، گو ({.} کے لیے)، اور روبی (لوپ ڈو. اینڈ) شامل ہیں۔ اکثر، ایک لامحدود لوپ غیر ارادی طور پر کنڈیشن کنٹرولڈ لوپ میں پروگرامنگ کی غلطی سے پیدا ہوتا ہے، جس میں لوپ کنڈیشن ایسے متغیرات کا استعمال کرتا ہے جو لوپ کے اندر کبھی نہیں بدلتے۔ اگلی تکرار کے ساتھ تسلسل بعض اوقات لوپ کے باڈی کے اندر لوپ باڈی کے بقیہ حصے کو چھوڑنے اور لوپ کے اگلے تکرار کے ساتھ جاری رکھنے کی خواہش ہوتی ہے۔ کچھ زبانیں ایک بیان فراہم کرتی ہیں جیسے کہ جاری رکھیں (زیادہ تر زبانیں)، چھوڑ دیں، سائیکل (فورٹرن)، یا اگلا (پرل اور روبی)، جو ایسا کرے گا۔ اثر یہ ہے کہ سب سے اندرونی لوپ باڈی کو قبل از وقت ختم کر دیا جائے اور پھر اگلی تکرار کے ساتھ معمول کے مطابق دوبارہ شروع کیا جائے۔ اگر تکرار لوپ میں آخری ہے، تو اثر پورے لوپ کو جلد ختم کرنا ہے۔ موجودہ تکرار کو دوبارہ کریں کچھ زبانوں، جیسے پرل اور روبی، میں ایک دوبارہ بیان ہوتا ہے جو شروع سے ہی موجودہ تکرار کو دوبارہ شروع کرتا ہے۔ لوپ روبی کو دوبارہ شروع کرنے کا ایک بیان ہے جو ابتدائی تکرار سے پورے لوپ کو دوبارہ شروع کرتا ہے۔ ٹیبل کے ذریعے تلاش کرنے کے لیے کاؤنٹ کنٹرولڈ لوپ کا استعمال کرتے وقت، مطلوبہ آئٹم ملتے ہی تلاش کرنا بند کرنا مناسب ہو سکتا ہے۔ کچھ پروگرامنگ زبانیں ایک بیان فراہم کرتی ہیں جیسے بریک (زیادہ تر زبانیں)، ایگزٹ (ویژول بیسک)، یا آخری (پرل)، جس کا اثر موجودہ لوپ کو فوری طور پر ختم کرنا ہے، اور اس لوپ کے فورا بعد کنٹرول کو بیان میں منتقل کرنا ہے۔ ابتدائی باہر نکلنے والے لوپس کے لیے ایک اور اصطلاح لوپ-اینڈ-اے-ہاف ہے۔ مندرجہ ذیل مثال اڈا میں کی گئی ہے جو بیچ میں ٹیسٹ کے ساتھ لوپس اور لوپس سے ابتدائی اخراج دونوں کی حمایت کرتی ہے۔ دونوں خصوصیات بہت مماثل ہیں اور دونوں کوڈ کے ٹکڑوں کا موازنہ کرنے سے فرق ظاہر ہوگا: ابتدائی اخراج کو آئی ایف سٹیٹمنٹ کے ساتھ جوڑا جانا چاہیے جبکہ بیچ میں ایک کنڈیشن خود ساختہ تعمیر ہے۔ Ada.Text IO کے ساتھ ؛ Ada.Integer ٹیکسٹ IO کے ساتھ ؛ طریقہ کار پرنٹ _ اسکوائرز X: انٹیجر ہے ؛ شروع کریں ریڈ _ ڈیٹا: لوپ Ada.Integer ٹیکسٹ IO.Get (X) ؛ باہر نکلیں ریڈ _ ڈیٹا جب X = 0 ؛ Ada.Text IO.Put (X * X) ؛ Ada.Text IO.New_Line ؛ اینڈ لوپ ریڈ _ ڈیٹا ؛ اینڈ پرنٹ _ اسکوائرز ؛ ازگر کوڈ کے مشروط نفاذ کی حمایت کرتا ہے اس بات پر منحصر ہے کہ آیا لوپ جلدی باہر نکل گیا تھا (بریک سٹیٹمنٹ کے ساتھ) یا لوپ کے ساتھ کوئی دوسری شق استعمال کرکے نہیں۔ مثال کے طور پر، سیٹ _ آف _ نمبروں میں n کے لیے: اگر پرائم ہے (n): پرنٹ کریں ("سیٹ میں پرائم نمبر ہے") توڑا کریں اور پرنٹ کریں ("سیٹ میں کوئی پرائم نمبر نہیں تھا") مندرجہ بالا مثال میں ایلیس شق فار سٹیٹمنٹ سے منسلک ہے، نہ کہ انر آئی ایف سٹیٹمنٹ سے۔ پائیتھن کے فار اور وائل دونوں لوپس اس طرح کی دوسری شق کی حمایت کرتے ہیں، جو صرف اس صورت میں انجام دی جاتی ہے جب لوپ کا ابتدائی اخراج نہ ہوا ہو۔ کچھ زبانیں نیسٹڈ لوپس کو توڑنے کی حمایت کرتی ہیں۔ نظریاتی حلقوں میں، انہیں ملٹی لیول بریک کہا جاتا ہے۔ ایک عام استعمال کی مثال کثیر جہتی میز تلاش کرنا ہے۔ یہ یا تو ملٹی لیول بریکس (این لیولز سے بریک آؤٹ) کے ذریعے کیا جا سکتا ہے، جیسا کہ بیش اور پی ایچ پی میں، یا لیبل والے بریکس (بریک آؤٹ اور دیئے گئے لیبل پر جاری) کے ذریعے، جیسا کہ جاوا اور پرل میں ہوتا ہے۔ ملٹی لیول بریکس کے متبادل میں سنگل بریکس شامل ہیں، ایک ریاستی متغیر کے ساتھ جس کی جانچ دوسری سطح کو توڑنے کے لیے کی جاتی ہے۔ مستثنیات، جو اس سطح پر پکڑے جاتے ہیں جس پر ٹوٹے جا رہے ہیں۔ نیسٹڈ لوپس کو کسی فنکشن میں رکھنا اور پورے نیسٹڈ لوپ کو ختم کرنے کے لیے واپسی کا استعمال کرنا ؛ یا لیبل اور گوٹو بیان کا استعمال کرنا۔ سی میں ملٹی لیول بریک شامل نہیں ہے، اور عام متبادل یہ ہے کہ لیبل شدہ بریک کو نافذ کرنے کے لیے گوٹو کا استعمال کیا جائے۔ ازگر میں کثیر سطحی وقفہ یا تسلسل نہیں ہے-یہ پی ای پی 3136 میں تجویز کیا گیا تھا، اور اس بنیاد پر مسترد کر دیا گیا تھا کہ اضافی پیچیدگی نایاب جائز استعمال کے قابل نہیں تھی۔ کثیر سطحی وقفوں کا تصور نظریاتی کمپیوٹر سائنس میں کچھ دلچسپی کا باعث ہے، کیونکہ یہ اس چیز کو جنم دیتا ہے جسے آج کوسراجو درجہ بندی کہا جاتا ہے۔ 1973 میں ایس راؤ کوسراجو نے اسٹرکچرڈ پروگرام تھیوریم کو یہ ثابت کرتے ہوئے بہتر بنایا کہ اسٹرکچرڈ پروگرامنگ میں اضافی متغیرات کو شامل کرنے سے بچنا ممکن ہے، جب تک کہ لوپس سے من مانی گہرائی، کثیر سطح کے وقفوں کی اجازت ہو۔ مزید برآں، کوسراجو نے ثابت کیا کہ پروگراموں کا ایک سخت درجہ بندی موجود ہے: ہر عدد n کے لیے، ایک ایسا پروگرام موجود ہے جس میں گہرائی n کا ایک کثیر سطحی وقفہ ہوتا ہے جسے اضافی متغیرات متعارف کرائے بغیر n سے کم گہرائی کے کثیر سطحی وقفوں والے پروگرام کے طور پر دوبارہ نہیں لکھا جا سکتا۔ کوئی بھی لوپ شدہ بیانات کو انجام دینے والے سبروٹین سے بھی باہر نکل سکتا ہے، نیسٹڈ لوپ اور سبروٹین دونوں کو توڑ سکتا ہے۔ متعدد وقفوں کے لیے دیگر مجوزہ کنٹرول ڈھانچے ہیں، لیکن ان کو عام طور پر اس کے بجائے مستثنیات کے طور پر نافذ کیا جاتا ہے۔ اپنی 2004 کی نصابی کتاب میں، ڈیوڈ واٹ نے کثیر سطحی وقفوں اور واپسی کے بیانات کے درمیان مماثلت کی وضاحت کے لیے ٹینینٹ کے سیکوینسر کے تصور کا استعمال کیا ہے۔ واٹ نوٹ کرتا ہے کہ سیکوینسرز کی ایک کلاس جسے ایسکیپ سیکوینسرز کے نام سے جانا جاتا ہے، جس کی تعریف "سیکوینسر جو متن سے منسلک کمانڈ یا طریقہ کار پر عمل درآمد کو ختم کرتا ہے" کے طور پر کی گئی ہے، جس میں لوپس سے وقفے (بشمول کثیر سطحی وقفے) اور واپسی کے بیانات دونوں شامل ہیں۔ جیسا کہ عام طور پر لاگو کیا جاتا ہے، تاہم، ریٹرن سیکوینسرز میں (ریٹرن) ویلیو بھی ہو سکتی ہے، جبکہ بریک سیکوینسر جیسا کہ عصری زبانوں میں لاگو کیا جاتا ہے عام طور پر ایسا نہیں کر سکتا۔ لوپ کے متغیرات اور غیر متغیر لوپ کے متغیرات اور لوپ کے غیر متغیرات کو لوپ کی درستگی کو ظاہر کرنے کے لیے استعمال کیا جاتا ہے۔ عملی لحاظ سے، لوپ ورژن ایک انٹیجر ایکسپریشن ہے جس کی ابتدائی غیر منفی قدر ہوتی ہے۔ ہر لوپ تکرار کے دوران متغیر کی قیمت میں کمی ہونی چاہیے لیکن لوپ کے صحیح نفاذ کے دوران کبھی منفی نہیں ہونا چاہیے۔ لوپ متغیرات کا استعمال اس بات کی ضمانت کے لیے کیا جاتا ہے کہ لوپ ختم ہو جائیں گے۔ لوپ غیر متغیر ایک دعوی ہے جو پہلے لوپ تکرار سے پہلے درست ہونا چاہیے اور ہر تکرار کے بعد درست رہنا چاہیے۔ اس کا مطلب یہ ہے کہ جب کوئی لوپ صحیح طریقے سے ختم ہوتا ہے، تو باہر نکلنے کی حالت اور لوپ غیر متغیر دونوں مطمئن ہوتے ہیں۔ لوپ غیر متغیرات کا استعمال مسلسل تکرار کے دوران لوپ کی مخصوص خصوصیات کی نگرانی کے لیے کیا جاتا ہے۔ کچھ پروگرامنگ زبانیں، جیسے ایفل، لوپ متغیرات اور غیر متغیرات کے لیے مقامی حمایت پر مشتمل ہوتی ہیں۔ دوسرے معاملات میں، سپورٹ ایک ایڈ آن ہے، جیسے جاوا میں لوپ بیانات کے لیے جاوا ماڈلنگ لینگویج کی تفصیلات۔ لوپ ذیلی زبان کچھ Lisp بولیاں لوپس کو بیان کرنے کے لیے ایک وسیع ذیلی زبان فراہم کرتی ہیں۔ ایک ابتدائی مثال کنورشنل لیسپ آف انٹرلیسپ میں مل سکتی ہے۔ کامن لیسپ ایک لوپ میکرو فراہم کرتا ہے جو اس طرح کی ذیلی زبان کو لاگو کرتا ہے۔ لوپ سسٹم کراس ریفرنس ٹیبل جبکہ (سچ) اس مقصد کے لیے لامحدود لوپ کے طور پر شمار نہیں ہوتا ہے، کیونکہ یہ ایک مخصوص زبان کا ڈھانچہ نہیں ہے۔ سی کا (init ؛ ٹیسٹ ؛ انکریمنٹ) لوپ ایک عام لوپ کنسٹرکٹ ہے، خاص طور پر گنتی نہیں، حالانکہ یہ اکثر اس کے لیے استعمال ہوتا ہے۔ لیبل اور گوٹو کے استعمال کے ذریعے اے پی ایل، سی، سی + + اور سی #میں گہرے وقفے حاصل کیے جا سکتے ہیں۔ پی ایچ پی 5 میں اشیاء پر تکرار شامل کی گئی تھی۔ گنتی کے لوپ کو انکریمنٹنگ لسٹ یا جنریٹر پر دہرا کر نقل کیا جا سکتا ہے، مثال کے طور پر، ازگر کی حد ()۔ گہرے وقفے مستثنی ہینڈلنگ کے استعمال کے ذریعے مکمل کیے جا سکتے ہیں۔ کوئی خاص تعمیر نہیں ہے، کیونکہ اس کے لیے وائل فنکشن استعمال کیا جا سکتا ہے۔ کوئی خاص تعمیر نہیں ہے، لیکن صارفین عام لوپ افعال کی وضاحت کر سکتے ہیں۔ سی + + 11 معیار نے رینج پر مبنی کے لیے متعارف کرایا۔ ایس ٹی ایل میں، ہر ٹیمپلیٹ فنکشن کے لیے ایک ایس ٹی ڈی:: ہے جو ایس ٹی ایل کنٹینرز پر دہرایا جا سکتا ہے اور ہر عنصر کے لیے یونری فنکشن کو کال کر سکتا ہے۔ ان کنٹینروں پر فعالیت کو میکرو کے طور پر بھی بنایا جا سکتا ہے۔ کاؤنٹ کنٹرولڈ لوپنگ ایک انٹیجر وقفے میں تکرار کے ذریعے متاثر ہوتی ہے ؛ باہر نکلنے کے لیے ایک اضافی شرط شامل کر کے جلدی باہر نکلیں۔ ایفل ایک مخصوص لفظ کی دوبارہ کوشش کی حمایت کرتا ہے، تاہم یہ مستثنی ہینڈلنگ میں استعمال ہوتا ہے، نہ کہ لوپ کنٹرول میں۔ جاوا ماڈلنگ لینگویج (جے ایم ایل) رویے کی انٹرفیس کی تفصیلات کی زبان درکار ہے۔ لوپ متغیرات کو انٹیجر ہونے کی ضرورت ہوتی ہے ؛ ٹرانسفائنٹ متغیرات کی حمایت نہیں کی جاتی ہے۔ D لامحدود مجموعوں اور ان مجموعوں پر تکرار کرنے کی صلاحیت کی حمایت کرتا ہے۔ اس کے لیے کسی خاص تعمیر کی ضرورت نہیں ہے۔ گو ٹو اور طریقہ کار کا استعمال کرتے ہوئے گہرے وقفے حاصل کیے جا سکتے ہیں۔ کامن لیسپ عام مجموعہ کی قسم کے تصور سے پہلے کا ہے۔ بہت سی پروگرامنگ زبانیں، خاص طور پر جو پروگرامنگ کے زیادہ متحرک انداز کی حمایت کرتی ہیں، غیر مقامی کنٹرول فلو کے لیے تعمیرات پیش کرتی ہیں۔ یہ عمل کے بہاؤ کو کسی دیئے گئے سیاق و سباق سے باہر کودنے اور کسی پہلے سے اعلان کردہ مقام پر دوبارہ شروع کرنے کا سبب بنتے ہیں۔ شرائط، مستثنیات اور تسلسل غیر مقامی کنٹرول تعمیرات کی تین عام اقسام ہیں۔ زیادہ غیر ملکی بھی موجود ہیں، جیسے جنریٹر، کوراوٹائنز اور اسنک کلیدی لفظ۔ شرائط پی ایل/آئی میں کچھ 22 معیاری شرائط ہیں (مثال کے طور پر، ZERODIVIDE SABSCRIPTRANGE ENDFILE) جنہیں اٹھایا جا سکتا ہے اور جنہیں اس کے ذریعے روکا جا سکتا ہے: آن کنڈیشن ایکشن ؛ پروگرامر اپنی نامزد شرائط کی وضاحت اور استعمال بھی کر سکتے ہیں۔ غیر ساختہ کی طرح، صرف ایک بیان کی وضاحت کی جا سکتی ہے لہذا بہت سے معاملات میں یہ فیصلہ کرنے کے لیے کہ کنٹرول کا بہاؤ کہاں دوبارہ شروع ہونا چاہیے، ایک جی او ٹی او کی ضرورت ہوتی ہے۔ بدقسمتی سے، کچھ نفاذات میں جگہ اور وقت دونوں میں کافی حد تک اوور ہیڈ تھا (خاص طور پر سبسکرپٹرینج)، اس لیے بہت سے پروگرامرز نے شرائط کے استعمال سے بچنے کی کوشش کی۔ عام نحو کی مثالیں: آن کنڈیشن گوٹو لیبل مستثنیات جدید زبانوں میں مستثنی ہینڈلنگ کے لیے ایک خصوصی ساختہ تعمیر ہوتی ہے جو گوٹو یا (ملٹی لیول) بریکس یا ریٹرن کے استعمال پر انحصار نہیں کرتی ہے۔ مثال کے طور پر، C + + میں کوئی بھی لکھ سکتا ہے: آزمائیں {XXX1// یہاں کہیں XXX2// استعمال کریں: 'پھینک دیں' کچھ قدر ؛ XXX3} کیچ (کچھ کلاس اور کچھ آئی ڈی) {// کچھ کلاس ایکشن کی کیچ ویلیو فار سومس کلاس} کیچ (کچھ ٹائپ اور دوسرے آئی ڈی) {// کچھ ٹائپ ایکشن کی کیچ ویلیو فار سومس ٹائپ} کیچ (.) {// کچھ بھی پکڑو جو پہلے سے پکڑا نہیں گیا ہے ایکشن فار اینیتھنگ ایلیس کے لیے کسی بھی تعداد اور مختلف قسم کی کیچ شقوں کو اوپر استعمال کیا جا سکتا ہے۔ اگر کسی خاص تھرو سے مماثل کوئی کیچ نہیں ہے، تو سبروٹین کالز اور/یا نیسٹڈ بلاکس کے ذریعے کنٹرول واپس آتا ہے جب تک کہ مماثل کیچ نہ مل جائے یا مرکزی پروگرام کے اختتام تک نہ پہنچ جائے، جس مقام پر پروگرام کو مناسب ایرر میسج کے ساتھ زبردستی روک دیا جاتا ہے۔ سی + + کے اثر کے ذریعے، کیچ وہ کلیدی لفظ ہے جو آج کل مقبول دیگر زبانوں جیسے جاوا یا سی #میں پیٹرن سے ملنے والے مستثنی ہینڈلر کا اعلان کرنے کے لیے محفوظ ہے۔ اڈا جیسی کچھ دوسری زبانیں مستثنی ہینڈلر کو متعارف کرانے کے لیے کلیدی لفظ کا استعمال کرتی ہیں اور پھر پیٹرن میچنگ کے لیے ایک مختلف کلیدی لفظ (جب اڈا میں ہو) بھی استعمال کر سکتی ہیں۔ ایپل اسکرپٹ جیسی چند زبانیں مستثنی ہینڈلر نحو میں پلیس ہولڈرز کو شامل کرتی ہیں تاکہ جب مستثنی ہو تو خود بخود معلومات کے کئی ٹکڑے نکال سکیں۔ اس نقطہ نظر کی مثال ایپل اسکرپٹ سے آن ایرر کنسٹرکٹ کے ذریعے ذیل میں دی گئی ہے: ایرر پر مائی نمبر کو مائی نمبر/0 پر سیٹ کرنے کی کوشش کریں ای نمبر این کو ایف سے ٹی جزوی نتیجہ پر اگر (ای = "صفر سے تقسیم نہیں کیا جا سکتا") تو ڈائیلاگ دکھائیں "آپ کو ایسا نہیں کرنا چاہیے" آخر میں ڈیوڈ واٹ کی 2004 کی نصابی کتاب بھی سیکوینسرز کے فریم ورک میں مستثنی ہینڈلنگ کا تجزیہ کرتی ہے (لوپس سے ابتدائی اخراج پر اس مضمون میں متعارف کرایا گیا ہے)۔ واٹ نوٹ کرتا ہے کہ ایک غیر معمولی صورتحال، جس کی مثال عام طور پر ریاضی کے اوور فلوز یا ان پٹ/آؤٹ پٹ ناکامیوں جیسے فائل نہیں ملی، ایک قسم کی غلطی ہے جس کا پتہ "کسی نچلے درجے کے پروگرام یونٹ میں لگایا جاتا ہے، لیکن [جس کے لیے] ایک ہینڈلر زیادہ قدرتی طور پر اعلی درجے کے پروگرام یونٹ میں واقع ہوتا ہے"۔ مثال کے طور پر، کسی پروگرام میں فائلوں کو پڑھنے کے لیے کئی کالز ہو سکتی ہیں، لیکن جب کوئی فائل نہیں ملتی ہے تو انجام دینے کا عمل پروگرام میں زیر بحث فائل کے معنی (مقصد) پر منحصر ہوتا ہے اور اس طرح اس غیر معمولی صورتحال کے لیے ہینڈلنگ کا معمول نچلے درجے کے سسٹم کوڈ میں واقع نہیں ہو سکتا۔ واٹز مزید نوٹ کرتا ہے کہ کال کرنے والے میں اسٹیٹس فلیگ ٹیسٹنگ متعارف کروانا، جیسا کہ سنگل ایگزٹ اسٹرکچرڈ پروگرامنگ یا یہاں تک کہ (ملٹی ایگزٹ) ریٹرن سیکوینسرز بھی شامل ہیں، اس کے نتیجے میں ایسی صورتحال پیدا ہوتی ہے جہاں "ایپلیکیشن کوڈ اسٹیٹس فلیگ کے ٹیسٹ سے بے ترتیب ہو جاتا ہے" اور یہ کہ "پروگرامر اسٹیٹس فلیگ کی جانچ کرنا بھول سکتا ہے یا سست روی سے چھوڑ سکتا ہے۔ درحقیقت، اسٹیٹس فلیگ کے ذریعے ظاہر کیے جانے والے غیر معمولی حالات کو پہلے سے طے شدہ طور پر نظر انداز کر دیا جاتا ہے! " واٹ نوٹ کرتا ہے کہ اسٹیٹس فلیگ ٹیسٹنگ کے برعکس، مستثنیات کا مخالف ڈیفالٹ طرز عمل ہوتا ہے، جس کی وجہ سے پروگرام ختم ہو جاتا ہے جب تک کہ پروگرامر واضح طور پر کسی طرح سے استثناء سے نمٹتا ہے، ممکنہ طور پر اسے نظر انداز کرنے کے لیے واضح کوڈ شامل کر کے۔ ان دلائل کی بنیاد پر، واٹ نے یہ نتیجہ اخذ کیا ہے کہ جمپ سیکوینسرز یا اسکیپ سیکوینسرز اوپر بیان کردہ الفاظ کے ساتھ ایک مخصوص مستثنی سیکوینسر کی طرح موزوں نہیں ہیں۔ آبجیکٹ پاسکل، ڈی، جاوا، سی #، اور ازگر میں آخر میں ٹرائی کنسٹرکٹ میں ایک شق شامل کی جا سکتی ہے۔ اس بات سے کوئی فرق نہیں پڑتا کہ کنٹرول کس طرح ٹرائی چھوڑتا ہے آخر میں شق کے اندر کوڈ پر عمل درآمد کی ضمانت دی جاتی ہے۔ یہ کوڈ لکھتے وقت مفید ہوتا ہے جب پروسیسنگ مکمل ہونے پر کسی مہنگے وسائل (جیسے کھولی ہوئی فائل یا ڈیٹا بیس کنکشن) کو ترک کرنا پڑتا ہے: فائل اسٹریم ایس ٹی ایم = کالعدم ؛// سی #مثال آزمائیں {ایس ٹی ایم = نیا فائل اسٹریم ("logfile.txt"، FileMode.Create) ؛ پروسس اسٹف (ایس ٹی ایم) واپس کریں ؛// آخر میں ایک رعایت پھینک سکتا ہے] [اگر (ایس ٹی ایم! = کالعدم) stm.Close ()] چونکہ یہ نمونہ کافی عام ہے، سی #کا ایک خاص نحو ہے: استعمال کرنا (ور ایس ٹی ایم = نیا فائل اسٹریم ("logfile.txt"، FileMode.Create)) {ریٹرن پروسیس اسٹف (ایس ٹی ایم) ؛/چھوڑنے پر ایک رعایت پھینک سکتا ہے] پائیتھنز ود سٹیٹمنٹ اور روبیز بلاک آرگیومنٹ ٹو File.open اسی طرح کے اثر کے لیے استعمال ہوتے ہیں۔ مذکورہ بالا تمام زبانیں معیاری مستثنیات اور ان حالات کی وضاحت کرتی ہیں جن کے تحت انہیں پھینکا جاتا ہے۔ صارفین اپنے مستثنیات کو پھینک سکتے ہیں ؛ درحقیقت سی + + صارفین کو تقریبا کسی بھی قسم کو پھینکنے اور پکڑنے کی اجازت دیتا ہے، بشمول بنیادی اقسام جیسے انٹ، جبکہ جاوا جیسی دیگر زبانیں اتنی اجازت یافتہ نہیں ہیں۔ تسلسل اسنک C #5.0 نے "براہ راست انداز" میں اسنکرونس I/O کی حمایت کرنے کے لیے اسنک کلیدی لفظ متعارف کرایا۔ جنریٹر جنریٹر، جنہیں سیمی کوروٹائنز بھی کہا جاتا ہے، عارضی طور پر صارف کے طریقہ کار پر کنٹرول حاصل کرنے کی اجازت دیتے ہیں، عام طور پر مطلوبہ الفاظ (پیداوار کی تفصیل) کا استعمال کرتے ہوئے۔ اسنک مطلوبہ الفاظ کی طرح، یہ "براہ راست انداز" میں پروگرامنگ کی حمایت کرتا ہے۔ کوراوٹائنز وہ افعال ہیں جو ایک دوسرے پر قابو پا سکتے ہیں-دھاگوں کے بغیر کوآپریٹو ملٹی ٹاسکنگ کی ایک شکل۔ کوراوٹینز کو لائبریری کے طور پر لاگو کیا جا سکتا ہے اگر پروگرامنگ زبان یا تو تسلسل یا جنریٹر فراہم کرتی ہے-لہذا عملی طور پر کوراوٹینز اور جنریٹرز کے درمیان فرق ایک تکنیکی تفصیل ہے۔ غیر مقامی کنٹرول فلو کراس ریفرنس مجوزہ کنٹرول ڈھانچے 1973 میں ڈیٹیمیشن کے ایک لطیفے کے مضمون میں، آر لارنس کلارک نے تجویز کیا کہ گوٹو کے بیان کو کامفروم بیان سے تبدیل کیا جا سکتا ہے، اور کچھ دل لگی مثالیں فراہم کرتا ہے۔ کامفروم کو انٹرکل نامی ایک خفیہ پروگرامنگ زبان میں لاگو کیا گیا تھا۔ ڈونلڈ نوتھ کے 1974 کے مضمون "اسٹرکچرڈ پروگرامنگ ود گو ٹو سٹیٹمنٹس" میں دو ایسے حالات کی نشاندہی کی گئی ہے جو اوپر درج کردہ کنٹرول ڈھانچوں میں شامل نہیں تھے، اور کنٹرول ڈھانچوں کی مثالیں دی گئی ہیں جو ان حالات کو سنبھال سکتے ہیں۔ ان کی افادیت کے باوجود، ان تعمیرات نے ابھی تک مرکزی دھارے کی پروگرامنگ زبانوں میں اپنا راستہ نہیں پایا ہے۔ بیچ میں ٹیسٹ کے ساتھ لوپ ڈہل نے 1972 میں مندرجہ ذیل تجویز پیش کی تھی: لوپ لوپ XXX1 ریڈ (چار) ؛ جبکہ ٹیسٹ ؛ جبکہ اینڈ آف فائل میں نہیں ؛ XXX2 لکھیں (چار) ؛ دہرائیں ؛ دہرائیں ؛ اگر XXX1 کو چھوڑ دیا گیا ہے، تو ہمیں سب سے اوپر ٹیسٹ کے ساتھ ایک لوپ ملتا ہے (ایک روایتی وائل لوپ)۔ اگر XXX2 کو خارج کر دیا جاتا ہے، تو ہمیں نیچے ٹیسٹ کے ساتھ ایک لوپ ملتا ہے، جو بہت سی زبانوں میں ڈو وائل لوپ کے برابر ہے۔ اگر وائل کو خارج کر دیا جائے تو ہمیں ایک لامحدود لوپ ملتا ہے۔ یہاں کی تعمیر کو بیچ میں وائیل چیک کے ساتھ ڈو لوپ کے طور پر سوچا جا سکتا ہے۔ لہذا یہ واحد تعمیر زیادہ تر پروگرامنگ زبانوں میں کئی تعمیرات کی جگہ لے سکتی ہے۔ اس ساخت کی کمی والی زبانیں عام طور پر ایک مساوی لامحدود لوپ کے ساتھ بریک کا استعمال کرتے ہوئے اس کی تقلید کرتی ہیں: جبکہ (سچ) {XXX1 اگر (ٹیسٹ نہیں) بریک XXX2} ایک ممکنہ قسم ٹیسٹ کے دوران ایک سے زیادہ کی اجازت دینا ہے۔ لوپ کے اندر، لیکن ایگزٹ کا استعمال جب اس معاملے کا بہتر احاطہ کرتا دکھائی دیتا ہے (اگلا سیکشن دیکھیں)۔ اڈا میں، مندرجہ بالا لوپ کی تعمیر (لوپ-جبکہ-دہرائیں) کو ایک معیاری لامحدود لوپ (لوپ-اینڈ لوپ) کا استعمال کرتے ہوئے پیش کیا جا سکتا ہے جس میں وسط میں شق کے ساتھ باہر نکلنا ہوتا ہے (مندرجہ ذیل حصے میں ایگزٹ وین بیان کے ساتھ الجھن میں نہ پڑنا)۔ Ada.Text _ IO کے ساتھ ؛ Ada.Integer_Text_IO کے ساتھ ؛ طریقہ کار پرنٹ _ اسکوائرز X: انٹیجر ہے ؛ شروع کریں ریڈ _ ڈیٹا: لوپ Ada.Integer_Text_IO۔ حاصل کریں (X) ؛ باہر نکلیں ریڈ _ ڈیٹا جب X = 0 ؛ Ada.Text IO.Put (X * X) ؛ Ada.Text IO.New_Line ؛ اینڈ لوپ ریڈ _ ڈیٹا ؛ اینڈ پرنٹ _ اسکوائرز ؛ ایک لوپ کا نام رکھنا (جیسے اس مثال میں ریڈ _ ڈیٹا) اختیاری ہے لیکن کئی نیسٹڈ لوپس کے بیرونی لوپ کو چھوڑنے کی اجازت دیتا ہے۔ نیسٹڈ لوپس سے ایک سے زیادہ ابتدائی اخراج/اخراج اس تعمیر کی تجویز زہن نے 1974 میں پیش کی تھی۔ ایک ترمیم شدہ ورژن یہاں پیش کیا گیا ہے۔ جب ایونٹ اے یا ایونٹ بی یا ایونٹ سی ؛ XXX ایونٹ اے سے باہر نکلتا ہے: ایکشن اے ایونٹ بی: ایکشن بی ایونٹ سی: ایکشن سی اینڈ ایگزٹ ؛ جب ان واقعات کی وضاحت کے لیے استعمال کیا جاتا ہے جو XXX کے اندر ہو سکتے ہیں، تو ان کے ہونے کی نشاندہی ایونٹ کے نام کو بیان کے طور پر استعمال کر کے کی جاتی ہے۔ جب کوئی واقعہ پیش آتا ہے، تو متعلقہ کارروائی کی جاتی ہے، اور پھر اختتام کے فورا بعد کنٹرول گزر جاتا ہے۔ یہ تعمیر اس بات کا تعین کرنے کے درمیان ایک بہت واضح علیحدگی فراہم کرتی ہے کہ کچھ صورتحال لاگو ہوتی ہے، اور اس صورتحال کے لیے کی جانے والی کارروائی۔ جب تصوراتی طور پر مستثنی ہینڈلنگ سے ملتا جلتا ہے، اور اس مقصد کے لیے بہت سی زبانوں میں مستثنیات یا اسی طرح کی تعمیرات استعمال کی جاتی ہیں۔ مندرجہ ذیل سادہ مثال میں کسی خاص شے کے لیے دو جہتی میز تلاش کرنا شامل ہے۔ باہر نکلنا جب مل جائے یا غائب ہو جائے ؛ I: = 1 سے N کے لیے J: = 1 سے M کے لیے کریں اگر ٹیبل [I, J] = ہدف پھر مل گیا ؛ لاپتہ ؛ باہر نکلتا ہے: پرنٹ ("آئٹم ٹیبل میں ہے") ؛ لاپتہ: پرنٹ ("آئٹم ٹیبل میں نہیں ہے") ؛ اینڈیکسٹ ؛ سیکیورٹی سافٹ ویئر کے کسی ٹکڑے پر حملہ کرنے کا ایک طریقہ پروگرام کے عمل کے بہاؤ کو ری ڈائریکٹ کرنا ہے۔ ان حملوں کے خلاف دفاع کے لیے مختلف قسم کی کنٹرول فلو انٹیگریٹی تکنیک استعمال کی جاتی ہیں، جن میں اسٹیک کینریز، بفر اوور فلو پروٹیکشن، شیڈو اسٹیکس، اور وی ٹیبل پوائنٹر کی تصدیق شامل ہیں۔ برانچ (کمپیوٹر سائنس) کنٹرول فلو تجزیہ کنٹرول فلو ڈائیگرام کنٹرول فلو گراف کنٹرول ٹیبل کروٹین سائکلومیٹک پیچیدگی ڈریکون-چارٹ فلو چارٹ گوٹو جیرو، کنٹرول ڈھانچے سیکھنے میں مدد کرتا ہے مین لوپ ریکرشن شیڈولنگ (کمپیوٹنگ) اسپیگیٹی کوڈ اسٹرکچرڈ پروگرامنگ سبروٹین سوئچ سٹیٹمنٹ، کنٹرول فلو کو مشروط طور پر تبدیل کرتا ہے۔ مزید پڑھنے کے لیے ہور، سی اے آر۔ "پارٹیشن: الگورتھم 63"، "کوئکسورٹ: الگورتھم 64"، اور "فائنڈ: الگورتھم 65"۔ کوم۔ ACM 4، 321-322، 1961۔ بیرونی لنکس پر جائیں بیان کو نقصان دہ سمجھا جاتا ہے مثال کے طور پر اڈا کوڈ کے ساتھ جی او ٹی او سے کم پروگرامنگ مضامین کی لسانی شراکت