Control flow
কম্পিউটার বিজ্ঞানে, নিয়ন্ত্রণ প্রবাহ (বা নিয়ন্ত্রণের প্রবাহ) হল সেই ক্রম যেখানে একটি অপরিহার্য প্রোগ্রামের পৃথক বিবৃতি, নির্দেশাবলী বা ফাংশন কলগুলি কার্যকর বা মূল্যায়ন করা হয়। স্পষ্ট নিয়ন্ত্রণ প্রবাহের উপর জোর দেওয়া একটি অপরিহার্য প্রোগ্রামিং ভাষাকে একটি ঘোষণামূলক প্রোগ্রামিং ভাষা থেকে আলাদা করে। একটি অপরিহার্য প্রোগ্রামিং ভাষার মধ্যে, একটি নিয়ন্ত্রণ প্রবাহ বিবৃতি এমন একটি বিবৃতি যা দুই বা ততোধিক পথের মধ্যে কোনটি অনুসরণ করতে হবে তা বেছে নেওয়ার ফলস্বরূপ। অ-কঠোর কার্যকরী ভাষার জন্য, ফাংশন এবং ভাষা গঠন একই ফলাফল অর্জনের জন্য বিদ্যমান, তবে এগুলিকে সাধারণত নিয়ন্ত্রণ প্রবাহ বিবৃতি বলা হয় না। বিবৃতিগুলির একটি সেট সাধারণত একটি ব্লক হিসাবে গঠন করা হয়, যা গোষ্ঠীকরণের পাশাপাশি একটি আভিধানিক সুযোগকেও সংজ্ঞায়িত করে। বাধা এবং সংকেত হল নিম্ন-স্তরের প্রক্রিয়া যা একটি সাবরুটিনের মতো নিয়ন্ত্রণের প্রবাহকে পরিবর্তন করতে পারে, তবে সাধারণত একটি ইন-লাইন নিয়ন্ত্রণ প্রবাহ বিবৃতি কার্যকর করার পরিবর্তে কিছু বাহ্যিক উদ্দীপনা বা ঘটনার প্রতিক্রিয়া হিসাবে ঘটে (যা অ্যাসিঙ্ক্রোনাসভাবে ঘটতে পারে)। যান্ত্রিক ভাষা বা সমাবেশ ভাষার স্তরে, নিয়ন্ত্রণ প্রবাহের নির্দেশাবলী সাধারণত প্রোগ্রাম কাউন্টার পরিবর্তন করে কাজ করে। কিছু সেন্ট্রাল প্রসেসিং ইউনিটের (সিপিইউ) জন্য, একমাত্র উপলব্ধ নিয়ন্ত্রণ প্রবাহের নির্দেশাবলী হল শর্তাধীন বা নিঃশর্ত শাখা নির্দেশাবলী, যাকে জাম্পও বলা হয়। বিভাগ বিভিন্ন ভাষা দ্বারা সমর্থিত নিয়ন্ত্রণ প্রবাহের বিবৃতিগুলির প্রকারগুলি পরিবর্তিত হয়, তবে তাদের প্রভাব দ্বারা শ্রেণীবদ্ধ করা যেতে পারেঃ একটি ভিন্ন বিবৃতিতে ধারাবাহিকতা (নিঃশর্ত শাখা বা লাফ) শুধুমাত্র যদি কিছু শর্ত পূরণ করা হয় তবে বিবৃতিগুলির একটি সেট কার্যকর করা (পছন্দ-অর্থাৎ, শর্তাধীন শাখা) শূন্য বা তার বেশি বার বিবৃতিগুলির একটি সেট কার্যকর করা, যতক্ষণ না কিছু শর্ত পূরণ করা হয় (অর্থাৎ, লুপ-শর্তাধীন শাখার মতো) দূরবর্তী বিবৃতিগুলির একটি সেট কার্যকর করা, যার পরে নিয়ন্ত্রণের প্রবাহ সাধারণত ফিরে আসে (সাবরুটিন, করোটিন এবং ধারাবাহিকতা) প্রোগ্রামটি বন্ধ করা, আরও কোনও কার্যকরকরণ (নিঃশর্ত বিরতি) আদিম লেবেল একটি লেবেল একটি স্পষ্ট নাম বা সংখ্যা যা নির্দিষ্ট অবস্থানের মধ্যে নির্ধারিত হয়। একটি লেবেল সোর্স কোডের মধ্যে একটি অবস্থান চিহ্নিত করে এবং এর অন্য কোনও প্রভাব নেই। লাইন নম্বরগুলি কিছু ভাষায় ব্যবহৃত একটি নামযুক্ত লেবেলের বিকল্প (যেমন বেসিক)। এগুলি হল উৎস কোডে পাঠ্যের প্রতিটি লাইনের শুরুতে রাখা পূর্ণ সংখ্যা। যে ভাষাগুলি এগুলি ব্যবহার করে তারা প্রায়শই এই সীমাবদ্ধতা আরোপ করে যে নিম্নলিখিত প্রতিটি লাইনে লাইন সংখ্যার মান অবশ্যই বৃদ্ধি করতে হবে, তবে তাদের ধারাবাহিক হওয়ার প্রয়োজন নাও হতে পারে। উদাহরণস্বরূপ, মৌলিক ভাষায়ঃ 10 লেট এক্স = 3 20 প্রিন্ট এক্স সি এবং অ্যাডার মতো অন্যান্য ভাষায়, একটি লেবেল একটি শনাক্তকারী, যা সাধারণত একটি লাইনের শুরুতে উপস্থিত হয় এবং অবিলম্বে একটি কোলন দ্বারা অনুসরণ করা হয়। উদাহরণস্বরূপ, সি-তেঃ সাফল্যঃ প্রিন্টএফ ("অপারেশন সফল হয়েছিল। \n"); এএলজিওএল 60 ভাষাটি সম্পূর্ণ সংখ্যা এবং শনাক্তকারী উভয়কেই লেবেল হিসাবে অনুমতি দেয় (উভয়ই নিম্নলিখিত বিবৃতির সাথে কোলন দ্বারা সংযুক্ত), তবে খুব কমই যদি অন্য কোনও এএলজিওএল রূপগুলি সম্পূর্ণ সংখ্যার অনুমতি দেয়। প্রারম্ভিক ফোরট্রান সংকলকগুলি শুধুমাত্র সম্পূর্ণ সংখ্যাকে লেবেল হিসাবে অনুমতি দিয়েছিল। ফোরট্রান-90 থেকে শুরু করে, বর্ণানুক্রমিক লেবেলগুলিরও অনুমতি দেওয়া হয়েছে। গোটো বিবৃতি (ইংরেজি শব্দের সংমিশ্রণ এবং সেই অনুযায়ী উচ্চারিত হয়) নিয়ন্ত্রণের নিঃশর্ত স্থানান্তরের সবচেয়ে মৌলিক রূপ। যদিও মূলশব্দটি ভাষার উপর নির্ভর করে উপরের বা নীচের ক্ষেত্রে হতে পারে, তবে এটি সাধারণত এইভাবে লেখা হয়ঃ গোটো লেবেল একটি গোটো বিবৃতির প্রভাব হল পরবর্তী বিবৃতিটি নির্দেশিত লেবেলে (বা অবিলম্বে পরে) প্রদর্শিত বিবৃতি হিসাবে কার্যকর করা। গোটো বিবৃতিগুলি অনেক কম্পিউটার বিজ্ঞানী, বিশেষত ডিজকস্ট্রা দ্বারা ক্ষতিকারক বলে মনে করা হয়েছে। সাবরুটিনের পরিভাষা পরিবর্তিত হয়; এগুলি বিকল্পভাবে রুটিন, পদ্ধতি, ফাংশন (বিশেষত যদি তারা ফলাফল প্রদান করে) বা পদ্ধতি (বিশেষত যদি তারা শ্রেণী বা প্রকার শ্রেণীর অন্তর্গত হয়) হিসাবে পরিচিত হতে পারে। 1950-এর দশকে, বর্তমান মান অনুযায়ী কম্পিউটারের স্মৃতি খুব ছোট ছিল তাই প্রধানত প্রোগ্রামের আকার কমাতে সাবরুটিন ব্যবহার করা হত। কোডের একটি অংশ একবার লেখা হত এবং তারপর একটি প্রোগ্রামে অন্যান্য বিভিন্ন জায়গা থেকে বহুবার ব্যবহার করা হত। আজকাল, সাবরুটিনগুলি প্রায়শই একটি প্রোগ্রামকে আরও কাঠামোগত করতে সহায়তা করার জন্য ব্যবহৃত হয়, উদাহরণস্বরূপ, কিছু অ্যালগরিদম বিচ্ছিন্ন করে বা কিছু ডেটা অ্যাক্সেস পদ্ধতি লুকিয়ে রেখে। যদি অনেক প্রোগ্রামার একটি প্রোগ্রামে কাজ করে থাকেন, তাহলে সাবরুটিন হল এক ধরনের মডুলারিটি যা কাজকে বিভক্ত করতে সাহায্য করতে পারে। স্ট্রাকচার্ড প্রোগ্রামিং-এ, ধারাবাহিক কমান্ডগুলির অর্ডারড সিকোয়েন্সিংকে একটি মৌলিক নিয়ন্ত্রণ কাঠামো হিসাবে বিবেচনা করা হয়, যা পুনরাবৃত্তি, পুনরাবৃত্তি এবং পছন্দের পাশাপাশি প্রোগ্রামগুলির জন্য একটি বিল্ডিং ব্লক হিসাবে ব্যবহৃত হয়। ন্যূনতম কাঠামোগত নিয়ন্ত্রণ প্রবাহ 1966 সালের মে মাসে, বোহম এবং জ্যাকোপিনি কমিউনিকেশনস অফ দ্য এসিএম-এ একটি নিবন্ধ প্রকাশ করেছিলেন যা দেখায় যে গোটো সহ যে কোনও প্রোগ্রামকে গোটো-মুক্ত আকারে রূপান্তরিত করা যেতে পারে যার মধ্যে কেবল পছন্দ (যদি অন্যটি) এবং লুপ (ডাব্লুএইচআইএলই শর্ত ডিও এক্সএক্সএক্স) জড়িত থাকে, সম্ভবত ডুপ্লিকেট কোড এবং/অথবা বুলিয়ান ভেরিয়েবল (সত্য/মিথ্যা পতাকা) যোগ করে। পরবর্তী লেখকরা দেখিয়েছেন যে পছন্দটি লুপ (এবং আরও বেশি বুলিয়ান ভেরিয়েবল) দ্বারা প্রতিস্থাপিত হতে পারে। এই ধরনের মিনিমালিজম সম্ভব হওয়ার অর্থ এই নয় যে এটি অগত্যা কাম্য; সর্বোপরি, কম্পিউটারগুলির তাত্ত্বিকভাবে শুধুমাত্র একটি মেশিন নির্দেশের প্রয়োজন (ফলাফল নেতিবাচক হলে একটি সংখ্যাকে অন্য থেকে বিয়োগ করুন এবং শাখা করুন), তবে ব্যবহারিক কম্পিউটারগুলিতে কয়েক ডজন বা এমনকি শত শত মেশিন নির্দেশাবলী রয়েছে। বোহম এবং জ্যাকোপিনির নিবন্ধটি যা দেখিয়েছিল তা হল সমস্ত প্রোগ্রাম গো-মুক্ত হতে পারে। অন্যান্য গবেষণায় দেখা গেছে যে একটি প্রবেশ এবং একটি প্রস্থান সহ নিয়ন্ত্রণ কাঠামো অন্য যে কোনও রূপের তুলনায় বোঝা অনেক সহজ ছিল, মূলত কারণ এগুলি নিয়ন্ত্রণ প্রবাহকে ব্যাহত না করে বিবৃতি হিসাবে যে কোনও জায়গায় ব্যবহার করা যেতে পারে। অন্য কথায়, তারা শান্ত ছিল। (পরবর্তী উন্নয়ন, যেমন অ-কঠোর প্রোগ্রামিং ভাষা-এবং আরও সম্প্রতি, কম্পোজেবল সফ্টওয়্যার লেনদেন-এই কৌশলটি অব্যাহত রেখেছে, যা প্রোগ্রামগুলির উপাদানগুলিকে আরও অবাধে কম্পোজেবল করে তুলেছে।) কিছু শিক্ষাবিদ বোহম-জ্যাকোপিনি ফলাফলের প্রতি একটি বিশুদ্ধ দৃষ্টিভঙ্গি গ্রহণ করেছিলেন এবং যুক্তি দিয়েছিলেন যে এমনকি লুপগুলির মাঝখান থেকে বিরতি এবং প্রত্যাবর্তনের মতো নির্দেশাবলীও খারাপ অনুশীলন কারণ বোহম-জ্যাকোপিনি প্রমাণের মধ্যে এগুলির প্রয়োজন নেই এবং এইভাবে তারা পরামর্শ দিয়েছিলেন যে সমস্ত লুপগুলির একটি একক প্রস্থান বিন্দু থাকা উচিত। এই বিশুদ্ধ দৃষ্টিভঙ্গি পাস্কাল ভাষায় (1968-1969-এ পরিকল্পিত) মূর্ত, যা 1990-এর দশকের মাঝামাঝি পর্যন্ত একাডেমিয়ায় প্রারম্ভিক প্রোগ্রামিং শেখানোর জন্য পছন্দের হাতিয়ার ছিল। বোহম-জ্যাকোপিনি উপপাদ্যের সরাসরি প্রয়োগের ফলে কাঠামোগত চার্টে অতিরিক্ত স্থানীয় পরিবর্তনশীল প্রবর্তিত হতে পারে এবং এর ফলে কিছু কোড ডুপ্লিকেশনও হতে পারে। পাস্কাল এই উভয় সমস্যার দ্বারা প্রভাবিত হয় এবং এরিক এস রবার্টস দ্বারা উদ্ধৃত পরীক্ষামূলক গবেষণা অনুসারে, ছাত্র প্রোগ্রামারদের একটি অ্যারেতে একটি উপাদান অনুসন্ধানের জন্য একটি ফাংশন লেখা সহ বেশ কয়েকটি সহজ সমস্যার জন্য পাস্কালে সঠিক সমাধান তৈরি করতে অসুবিধা হয়েছিল। রবার্টস দ্বারা উদ্ধৃত হেনরি শাপিরোর 1980 সালের একটি গবেষণায় দেখা গেছে যে শুধুমাত্র পাস্কাল-প্রদত্ত নিয়ন্ত্রণ কাঠামো ব্যবহার করে, শুধুমাত্র 20 শতাংশ বিষয় সঠিক সমাধান দিয়েছিল, যখন কোনও বিষয় এই সমস্যার জন্য ভুল কোড লেখেনি যদি একটি লুপের মাঝখান থেকে রিটার্ন লেখার অনুমতি দেওয়া হয়। অনুশীলনে নিয়ন্ত্রণ কাঠামো নিয়ন্ত্রণ কাঠামো সহ বেশিরভাগ প্রোগ্রামিং ভাষার একটি প্রাথমিক কীওয়ার্ড থাকে যা জড়িত নিয়ন্ত্রণ কাঠামোর ধরণ নির্দেশ করে। ভাষাগুলি তখন নিয়ন্ত্রণ কাঠামোর একটি চূড়ান্ত কীওয়ার্ড আছে কি না তা নিয়ে বিভক্ত হয়। কোনও চূড়ান্ত কীওয়ার্ড নেইঃ এএলজিওএল 60, সি, সি + +, হাস্কেল, জাভা, পাস্কাল, পার্ল, পিএইচপি, পিএল/আই, পাইথন, পাওয়ারশেল। এই ধরনের ভাষাগুলির বিবৃতিগুলিকে একত্রিত করার জন্য কিছু উপায় প্রয়োজনঃ এএলজিওএল 60 এবং প্যাসকেলঃ শুরু. শেষ সি, সি + +, জাভা, পার্ল, পিএইচপি, এবং পাওয়ারশেলঃ কোঁকড়া বন্ধনী। পিএল/আইঃ ডিও। শেষ পাইথনঃ ইন্ডেন্ট স্তর ব্যবহার করে (অফ-সাইড নিয়ম দেখুন) হাস্কেলঃ হয় ইন্ডেন্ট স্তর বা কোঁকড়া বন্ধনী ব্যবহার করা যেতে পারে, এবং সেগুলি অবাধে মিশ্রিত করা যেতে পারে লুয়াঃ ব্যবহার করে। শেষ কীওয়ার্ডঃ অ্যাডা, এপিএল, এএলজিওএল 68, মডুলা-2, ফোরট্রান 77, মাইথ্রিল, ভিজ্যুয়াল বেসিক। চূড়ান্ত কীওয়ার্ডের রূপগুলি পরিবর্তিত হয়ঃ অ্যাডাঃ চূড়ান্ত কীওয়ার্ড হল শেষ + স্থান + প্রাথমিক কীওয়ার্ড উদাহরণস্বরূপ, যদি. শেষ হয়, লুপ. শেষ লুপ এপিএলঃ চূড়ান্ত কীওয়ার্ড হলঃ ঐচ্ছিকভাবে শেষ + প্রাথমিক কীওয়ার্ড, উদাহরণস্বরূপঃ যদি.: শেষ বাঃ যদি.: শেষ করুন, নির্বাচন করুন.: শেষ করুন বাঃ নির্বাচন করুন।: শেষ করুন, তবে, যদি একটি শেষ শর্ত যোগ করা হয়, শেষ কীওয়ার্ড হয়ে যায়ঃ ALGOL 68 পর্যন্ত, মাইথ্রিলঃ প্রাথমিক কীওয়ার্ড বানান পিছন দিকে হয় যেমন, যদি. ফাই, কেস। ইসাক ফোরট্রান 77: চূড়ান্ত কীওয়ার্ড হল END + প্রাথমিক কীওয়ার্ড যেমন, IF. যদি. শেষ যদি; জন্য. পরবর্তী; করুন. লুপ; এদিকে. ওয়েন্ড চয়েস যদি-তাহলে-(অন্য) বিবৃতি শর্তসাপেক্ষ অভিব্যক্তি এবং শর্তাধীন গঠনগুলি একটি প্রোগ্রামিং ভাষার বৈশিষ্ট্য যা প্রোগ্রামার-নির্দিষ্ট বুলিয়ান শর্তটি সত্য বা মিথ্যা মূল্যায়ন করে কিনা তার উপর নির্ভর করে বিভিন্ন গণনা বা ক্রিয়া সম্পাদন করে। IF.GOTO। কাঠামোবদ্ধ ভাষায় পাওয়া একটি ফর্ম, একটি সাধারণ মেশিন কোড নির্দেশ অনুকরণ করে, শর্ত পূরণ হলে একটি লেবেল বা লাইন নম্বরে (জিওটিও) ঝাঁপিয়ে পড়বে। IF.THEN. (ENDIF)। লাফ দেওয়ার মধ্যে সীমাবদ্ধ থাকার পরিবর্তে, যে কোনও সহজ বিবৃতি বা নেস্টেড ব্লক, থেন কীওয়ার্ড অনুসরণ করতে পারে। এটি একটি কাঠামোগত রূপ। IF.THEN.ELSE. (ENDIF)। উপরের মতই, কিন্তু যদি শর্তটি ভুল হয় তবে দ্বিতীয় পদক্ষেপটি সম্পাদন করতে হবে। এটি অনেক বৈচিত্র্য সহ সবচেয়ে সাধারণ রূপগুলির মধ্যে একটি। কারো কারো টার্মিনাল ই. এন. ডি. আই. এফ-এর প্রয়োজন হয়, আবার কারো কারো নয়। সি এবং সম্পর্কিত ভাষাগুলির জন্য একটি টার্মিনাল কীওয়ার্ড বা 'তারপর' প্রয়োজন হয় না, তবে শর্তটির চারপাশে বন্ধনীগুলির প্রয়োজন হয়। শর্তাধীন বিবৃতিগুলি হতে পারে এবং প্রায়শই অন্যান্য শর্তাধীন বিবৃতির মধ্যে নিহিত থাকে। কিছু ভাষা ELSE এবং IF-কে ELSEIF-এ একত্রিত করার অনুমতি দেয়, একটি যৌগিক বিবৃতির শেষে ENDIF বা অন্যান্য চূড়ান্ত বিবৃতিগুলির একটি সিরিজ থাকার প্রয়োজনীয়তা এড়িয়ে। কম প্রচলিত বৈচিত্র্যের মধ্যে রয়েছেঃ কিছু ভাষায়, যেমন ফোরট্রান, একটি ত্রিমুখী বা গাণিতিক থাকে যদি একটি সংখ্যাসূচক মান ধনাত্মক, ঋণাত্মক বা শূন্য কিনা তা পরীক্ষা করা হয়। কিছু ভাষায় একটি ইফ স্টেটমেন্টের কার্যকরী রূপ রয়েছে, উদাহরণস্বরূপ লিস্পের কনড। কিছু ভাষায় আইএফ স্টেটমেন্টের অপারেটর ফর্ম থাকে, যেমন সি-এর টার্নারি অপারেটর। পার্ল একটি সি-শৈলীর পরিপূরক হয় যদি কখন এবং যদি না হয়। স্মলটক কোনও মৌলিক ভাষা গঠনের পরিবর্তে শর্তাধীন প্রয়োগ করতে আইএফট্রু এবং আইএফফ্যালস বার্তা ব্যবহার করে। কেস এবং সুইচ স্টেটমেন্ট সুইচ স্টেটমেন্ট (বা কেস স্টেটমেন্ট, বা মাল্টিওয়ে শাখা) একটি প্রদত্ত মানকে নির্দিষ্ট ধ্রুবকের সাথে তুলনা করে এবং মেলে প্রথম ধ্রুবক অনুযায়ী পদক্ষেপ নেয়। কোনও ম্যাচ সফল না হলে সাধারণত ডিফল্ট অ্যাকশন ("অন্যথায়", "অন্যথায়") নেওয়ার বিধান থাকে। স্যুইচ স্টেটমেন্টগুলি অনুসন্ধান টেবিলের মতো কম্পাইলার অপ্টিমাইজেশনের অনুমতি দিতে পারে। গতিশীল ভাষাগুলিতে, কেসগুলি ধ্রুবক অভিব্যক্তির মধ্যে সীমাবদ্ধ নাও থাকতে পারে এবং প্যাটার্ন ম্যাচিং পর্যন্ত প্রসারিত হতে পারে, যেমন ডানদিকে শেল স্ক্রিপ্টের উদাহরণে, যেখানে *) ডিফল্ট কেসটিকে কোনও স্ট্রিংয়ের সাথে গ্লোব ম্যাচিং হিসাবে প্রয়োগ করে। এসকিউএল-এর ডিকোড বিবৃতির মতো কেস লজিক কার্যকরী আকারেও প্রয়োগ করা যেতে পারে। লুপ হল বিবৃতিগুলির একটি ক্রম যা একবার নির্দিষ্ট করা হয় তবে ধারাবাহিকভাবে বেশ কয়েকবার করা যেতে পারে। লুপের "ভিতরে" কোডটি (লুপের মূল অংশ, নীচে XXX হিসাবে দেখানো হয়েছে) নির্দিষ্ট সংখ্যক বার, বা প্রতিটি আইটেমের সংগ্রহের জন্য একবার, বা কিছু শর্ত পূরণ না হওয়া পর্যন্ত, বা অনির্দিষ্টকালের জন্য মেনে চলা হয়। কার্যকরী প্রোগ্রামিং ভাষাগুলিতে, যেমন হাস্কেল এবং স্কিম, পুনরাবৃত্তিমূলক এবং পুনরাবৃত্তিমূলক প্রক্রিয়া উভয়ই বাক্য গঠনমূলক লুপিং গঠনের পরিবর্তে লেজ পুনরাবৃত্তিমূলক পদ্ধতির মাধ্যমে প্রকাশ করা হয়। গণনা-নিয়ন্ত্রিত লুপ বেশিরভাগ প্রোগ্রামিং ভাষায় একটি লুপ নির্দিষ্ট সংখ্যক বার পুনরাবৃত্তি করার জন্য গঠন রয়েছে। বেশিরভাগ ক্ষেত্রে গণনা উপরের দিকে না গিয়ে নীচের দিকে যেতে পারে এবং 1 ছাড়া অন্য ধাপের মাপ ব্যবহার করা যেতে পারে। এই উদাহরণগুলিতে, যদি এন <1 হয় তবে প্রোগ্রামিং ভাষার উপর নির্ভর করে লুপের মূল অংশটি একবার কার্যকর হতে পারে (আমার মান 1 সহ) বা একেবারেই নয়। অনেক প্রোগ্রামিং ভাষায়, গণনা-নিয়ন্ত্রিত লুপে শুধুমাত্র পূর্ণসংখ্যা নির্ভরযোগ্যভাবে ব্যবহার করা যেতে পারে। ভাসমান-বিন্দু সংখ্যাগুলি হার্ডওয়্যার সীমাবদ্ধতার কারণে নিখুঁতভাবে প্রতিনিধিত্ব করা হয়, তাই X: = 0.1 ধাপ 0.1 থেকে 1.0-এর মতো একটি লুপ বৃত্তাকার ত্রুটি এবং/অথবা হার্ডওয়্যার এবং/অথবা সংকলক সংস্করণের উপর নির্ভর করে 9 বা 10 বার পুনরাবৃত্তি করা যেতে পারে। উপরন্তু, যদি পুনরাবৃত্ত যোগের মাধ্যমে এক্স-এর বৃদ্ধি ঘটে, তবে সঞ্চিত বৃত্তাকার ত্রুটির অর্থ হতে পারে যে প্রতিটি পুনরাবৃত্তিতে এক্স-এর মান প্রত্যাশিত ক্রম 0.1,0.2,0.3,., 1 থেকে বেশ উল্লেখযোগ্যভাবে পৃথক হতে পারে। শর্ত-নিয়ন্ত্রিত লুপ বেশিরভাগ প্রোগ্রামিং ভাষাগুলিতে কিছু শর্ত পরিবর্তন না হওয়া পর্যন্ত একটি লুপের পুনরাবৃত্তি করার জন্য নির্মাণ রয়েছে। কিছু বৈচিত্র লুপের শুরুতে শর্তটি পরীক্ষা করে; অন্যরা শেষে এটি পরীক্ষা করে। যদি পরীক্ষাটি শুরুতে হয়, তবে শরীরটি সম্পূর্ণরূপে বাদ দেওয়া যেতে পারে; যদি এটি শেষে থাকে তবে শরীরটি সর্বদা কমপক্ষে একবার কার্যকর করা হয়। কন্ট্রোল ব্রেক হল একটি মান পরিবর্তন সনাক্তকরণ পদ্ধতি যা সাধারণ লুপগুলির মধ্যে মানগুলির গোষ্ঠীর জন্য প্রক্রিয়াকরণকে ট্রিগার করতে ব্যবহৃত হয়। লুপের মধ্যে মানগুলি পর্যবেক্ষণ করা হয় এবং একটি পরিবর্তন তাদের সাথে যুক্ত গ্রুপ ইভেন্ট পরিচালনার জন্য প্রোগ্রাম প্রবাহকে ডাইভার্ট করে। অনেক প্রোগ্রামিং ভাষা (যেমন, অ্যাডা, ডি, সি + + 11, স্মলটক, পিএইচপি, পার্ল, অবজেক্ট প্যাসকেল, জাভা, সি #, ম্যাটল্যাব, ভিজ্যুয়াল বেসিক, রুবি, পাইথন, জাভাস্ক্রিপ্ট, ফোরট্রান 95 এবং পরবর্তী)-এর বিশেষ গঠন রয়েছে যা একটি অ্যারের সমস্ত উপাদানের মধ্য দিয়ে অন্তর্নিহিত লুপিংয়ের অনুমতি দেয়। কিছু কালেকশনঃ [: প্রতিটি এলিমেন্ট |xxx]। সংগ্রহের মধ্যে থাকা আইটেমের জন্য এক্সএক্সএক্স শেষ শুরু করুন; ফোর্যাচ (আইটেম; মাইকোলেকশন) {এক্সএক্সএক্স} কিছু আর্রে (এক্সএক্সএক্স) ফোর্যাচ (এক্সএক্সএক্স) সংগ্রহের জন্য (স্ট্রিং এসঃ কোল) {} ফোর্যাচ (মাইস্ট্রিংকোলেকশনে স্ট্রিং এস) {এক্সএক্সএক্স} কিছু সংগ্রহ। প্রতিটি-বস্তুর জন্য (সূচক = প্রথমঃ শেষঃ ধাপ।) স্কালার জন্য-এক্সপ্রেশন রয়েছে, যা সংগ্রহ-নিয়ন্ত্রিত লুপগুলিকে সাধারণীকরণ করে এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের মতো অন্যান্য ব্যবহারকেও সমর্থন করে। হাস্কেলের ডু-এক্সপ্রেশন এবং বোধগম্যতা রয়েছে, যা একসাথে স্কালায় ফর-এক্সপ্রেশনগুলির অনুরূপ ফাংশন সরবরাহ করে। সাধারণ পুনরাবৃত্তি সাধারণ পুনরাবৃত্তি গঠন যেমন বিবৃতির জন্য সি এবং কমন লিস্পের ডু ফর্ম উপরের যে কোনও ধরণের লুপ প্রকাশ করতে ব্যবহার করা যেতে পারে এবং অন্যান্য, যেমন সমান্তরালে কিছু সংখ্যক সংগ্রহের উপর লুপিং। যেখানে আরও নির্দিষ্ট লুপিং গঠন ব্যবহার করা যেতে পারে, এটি সাধারণত সাধারণ পুনরাবৃত্তি গঠনের চেয়ে বেশি পছন্দ করা হয়, কারণ এটি প্রায়শই অভিব্যক্তিটির উদ্দেশ্যকে আরও স্পষ্ট করে তোলে। অসীম লুপগুলি একটি প্রোগ্রাম সেগমেন্টের লুপগুলিকে চিরকালের জন্য বা কোনও ব্যতিক্রমী শর্ত দেখা না দেওয়া পর্যন্ত নিশ্চিত করতে ব্যবহৃত হয়, যেমন একটি ত্রুটি। উদাহরণস্বরূপ, একটি ইভেন্ট-চালিত প্রোগ্রাম (যেমন একটি সার্ভার) চিরকালের জন্য লুপ করা উচিত, ইভেন্টগুলি যেমন ঘটে তেমন পরিচালনা করা উচিত, কেবল তখনই থামানো উচিত যখন কোনও অপারেটর দ্বারা প্রক্রিয়াটি শেষ করা হয়। অন্যান্য নিয়ন্ত্রণ প্রবাহ গঠন ব্যবহার করে অসীম লুপ প্রয়োগ করা যেতে পারে। সাধারণত, কাঠামোবদ্ধ প্রোগ্রামিংয়ে এটি জাম্প ব্যাক আপ (গোটো) হয়, যখন কাঠামোগত প্রোগ্রামিংয়ে এটি একটি অনির্দিষ্ট লুপ (ওয়েল লুপ) যা কখনই শেষ না হওয়ার জন্য সেট করা হয়, হয় শর্তটি বাদ দিয়ে বা স্পষ্টভাবে এটিকে সত্য হিসাবে সেট করে, যেমন ওয়েল (সত্য)। কিছু ভাষায় অসীম লুপগুলির জন্য বিশেষ গঠন রয়েছে, সাধারণত একটি অনির্দিষ্ট লুপ থেকে শর্তটি বাদ দিয়ে। উদাহরণগুলির মধ্যে রয়েছে অ্যাডা (লুপ. এন্ড লুপ), ফোরট্রান (ডিও. এন্ড ডিও), গো ({.}-এর জন্য) এবং রুবি (লুপ ডু. এন্ড)। প্রায়শই, একটি অসীম লুপ অনিচ্ছাকৃতভাবে একটি শর্ত-নিয়ন্ত্রিত লুপে একটি প্রোগ্রামিং ত্রুটি দ্বারা তৈরি করা হয়, যেখানে লুপের শর্তটি এমন ভেরিয়েবল ব্যবহার করে যা লুপের মধ্যে কখনও পরিবর্তিত হয় না। পরবর্তী পুনরাবৃত্তির সাথে ধারাবাহিকতা কখনও কখনও একটি লুপের মূল অংশের মধ্যে লুপের মূল অংশের বাকি অংশটি এড়িয়ে যাওয়ার এবং লুপের পরবর্তী পুনরাবৃত্তি চালিয়ে যাওয়ার ইচ্ছা থাকে। কিছু ভাষা একটি বিবৃতি প্রদান করে যেমন কন্টিনিউ (বেশিরভাগ ভাষা), স্কিপ, সাইকেল (ফোরট্রান), বা পরবর্তী (পার্ল এবং রুবি), যা এটি করবে। প্রভাবটি হল অকালে ভিতরের লুপ বডিটি শেষ করা এবং তারপরে পরবর্তী পুনরাবৃত্তির সাথে স্বাভাবিক হিসাবে পুনরায় শুরু করা। যদি পুনরাবৃত্তিটি লুপের শেষটি হয়, তবে প্রভাবটি হল পুরো লুপটি তাড়াতাড়ি শেষ করা। বর্তমান পুনরাবৃত্তি পুনরায় করুন পার্ল এবং রুবির মতো কিছু ভাষায় একটি পুনরায় বিবৃতি রয়েছে যা শুরু থেকেই বর্তমান পুনরাবৃত্তি পুনরায় চালু করে। লুপ রুবি পুনরায় চালু করার একটি বিবৃতি রয়েছে যা প্রাথমিক পুনরাবৃত্তি থেকে পুরো লুপটি পুনরায় চালু করে। একটি টেবিলের মধ্যে অনুসন্ধান করার জন্য গণনা-নিয়ন্ত্রিত লুপ ব্যবহার করার সময়, প্রয়োজনীয় আইটেমটি পাওয়া মাত্রই অনুসন্ধান বন্ধ করা বাঞ্ছনীয় হতে পারে। কিছু প্রোগ্রামিং ভাষা একটি বিবৃতি প্রদান করে যেমন বিরতি (বেশিরভাগ ভাষা), প্রস্থান (ভিজ্যুয়াল বেসিক), বা শেষ (পার্ল), যার প্রভাব হল বর্তমান লুপটি অবিলম্বে শেষ করা, এবং সেই লুপের পরপরই বিবৃতিতে নিয়ন্ত্রণ স্থানান্তর করা। প্রারম্ভিক প্রস্থান লুপগুলির জন্য আরেকটি শব্দ হল লুপ-এন্ড-এ-হাফ। নিম্নলিখিত উদাহরণটি আদাতে করা হয়েছে যা মাঝখানে পরীক্ষা সহ লুপ এবং লুপ থেকে প্রাথমিক প্রস্থান উভয়কেই সমর্থন করে। উভয় বৈশিষ্ট্যই খুব অনুরূপ এবং উভয় কোড স্নিপেটের তুলনা করলে পার্থক্য দেখা যাবেঃ প্রারম্ভিক প্রস্থান অবশ্যই একটি যদি বিবৃতির সাথে মিলিত হতে হবে এবং মাঝখানে একটি শর্ত একটি স্বয়ংসম্পূর্ণ গঠন। 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 সালে এস. রাও কোসারাজু স্ট্রাকচার্ড প্রোগ্রাম থিওরেমকে পরিমার্জন করে প্রমাণ করেন যে স্ট্রাকচার্ড প্রোগ্রামিংয়ে অতিরিক্ত ভেরিয়েবল যোগ করা এড়ানো সম্ভব, যতক্ষণ পর্যন্ত লুপ থেকে নির্বিচারে-গভীর, বহু-স্তরের বিরতির অনুমতি দেওয়া হয়। উপরন্তু, কোসারাজু প্রমাণ করেছিলেন যে প্রোগ্রামগুলির একটি কঠোর শ্রেণিবিন্যাস বিদ্যমান রয়েছেঃ প্রতিটি পূর্ণসংখ্যা এন-এর জন্য, গভীরতার এন-এর একটি বহু-স্তরের বিরতি সহ একটি প্রোগ্রাম রয়েছে যা যোগ করা ভেরিয়েবলগুলি প্রবর্তন না করে এন-এর চেয়ে কম গভীরতার বহু-স্তরের বিরতি সহ একটি প্রোগ্রাম হিসাবে পুনর্লিখন করা যায় না। নেস্টেড লুপ এবং সাবরুটিন উভয়ই ভেঙে লুপ করা বিবৃতিগুলি কার্যকর করে একটি সাবরুটিন থেকে ফিরে আসতে পারে। একাধিক বিরতির জন্য অন্যান্য প্রস্তাবিত নিয়ন্ত্রণ কাঠামো রয়েছে, তবে এগুলি সাধারণত ব্যতিক্রম হিসাবে প্রয়োগ করা হয়। ডেভিড ওয়াট তাঁর 2004 সালের পাঠ্যপুস্তকে বহু-স্তরের বিরতি এবং রিটার্ন স্টেটমেন্টের মধ্যে সাদৃশ্য ব্যাখ্যা করতে টেনেন্টের সিকোয়েন্সারের ধারণাটি ব্যবহার করেছেন। ওয়াট উল্লেখ করেছেন যে এস্কেপ সিকোয়েন্সার নামে পরিচিত সিকোয়েন্সারের একটি শ্রেণী, "সিকোয়েন্সার যা পাঠ্যগতভাবে আবদ্ধ কমান্ড বা পদ্ধতির কার্যকরকরণ শেষ করে" হিসাবে সংজ্ঞায়িত, লুপ থেকে বিরতি (বহু-স্তরের বিরতি সহ) এবং রিটার্ন স্টেটমেন্ট উভয়কেই অন্তর্ভুক্ত করে। সাধারণভাবে বাস্তবায়িত হিসাবে, রিটার্ন সিকোয়েন্সারগুলি একটি (রিটার্ন) মানও বহন করতে পারে, যেখানে সমসাময়িক ভাষাগুলিতে বাস্তবায়িত ব্রেক সিকোয়েন্সার সাধারণত পারে না। লুপ ভেরিয়েন্ট এবং অপরিবর্তনীয় লুপ ভেরিয়েন্ট এবং লুপ অপরিবর্তনীয় লুপগুলির সঠিকতা প্রকাশ করতে ব্যবহৃত হয়। ব্যবহারিক ভাষায়, একটি লুপ বৈকল্পিক একটি পূর্ণসংখ্যা অভিব্যক্তি যার একটি প্রাথমিক অ-নেতিবাচক মান রয়েছে। প্রতিটি লুপ পুনরাবৃত্তির সময় বৈকল্পিকের মান অবশ্যই হ্রাস করতে হবে তবে লুপের সঠিক সম্পাদনের সময় কখনই নেতিবাচক হওয়া উচিত নয়। লুপ ভেরিয়েন্টগুলি লুপগুলি শেষ হয়ে যাবে তা নিশ্চিত করতে ব্যবহৃত হয়। একটি লুপ অপরিবর্তনীয় এমন একটি দাবি যা প্রথম লুপ পুনরাবৃত্তির আগে অবশ্যই সত্য হতে হবে এবং প্রতিটি পুনরাবৃত্তির পরেও সত্য থাকতে হবে। এটি বোঝায় যে যখন একটি লুপ সঠিকভাবে শেষ হয়, তখন প্রস্থান শর্ত এবং লুপ অপরিবর্তনীয় উভয়ই সন্তুষ্ট হয়। লুপ অপরিবর্তনীয়গুলি ধারাবাহিক পুনরাবৃত্তির সময় একটি লুপের নির্দিষ্ট বৈশিষ্ট্যগুলি পর্যবেক্ষণ করতে ব্যবহৃত হয়। কিছু প্রোগ্রামিং ভাষা, যেমন আইফেল-এ লুপ ভ্যারিয়েন্ট এবং অপরিবর্তনীয়গুলির জন্য স্থানীয় সমর্থন রয়েছে। অন্যান্য ক্ষেত্রে, সাপোর্ট হল একটি অ্যাড-অন, যেমন জাভাতে লুপ স্টেটমেন্টের জন্য জাভা মডেলিং ল্যাঙ্গুয়েজের নির্দিষ্টকরণ। লুপ উপভাষা কিছু লিস্প উপভাষা লুপ বর্ণনা করার জন্য একটি বিস্তৃত উপভাষা প্রদান করে। একটি প্রাথমিক উদাহরণ ইন্টারলিস্পের কনভারশনাল লিস্পে পাওয়া যায়। কমন লিস্প একটি লুপ ম্যাক্রো প্রদান করে যা এই ধরনের একটি উপভাষা প্রয়োগ করে। লুপ সিস্টেম ক্রস-রেফারেন্স টেবিল যদিও (সত্য) এই উদ্দেশ্যে একটি অসীম লুপ হিসাবে গণনা করা হয় না, কারণ এটি একটি নিবেদিত ভাষা কাঠামো নয়। সি 'স ফর (init; টেস্ট; ইনক্রিমেন্ট) লুপ একটি সাধারণ লুপ গঠন, বিশেষভাবে গণনা নয়, যদিও এটি প্রায়শই এর জন্য ব্যবহৃত হয়। লেবেল এবং গোটো ব্যবহারের মাধ্যমে এপিএল, সি, সি + + এবং সি #-এ গভীর বিরতি সম্পন্ন করা যেতে পারে। বস্তুর উপর পুনরাবৃত্তি পিএইচপি 5-এ যোগ করা হয়েছিল। একটি গণনা লুপটি একটি বর্ধিত তালিকা বা জেনারেটরের উপর পুনরাবৃত্তি করে অনুকরণ করা যেতে পারে, উদাহরণস্বরূপ, পাইথনের পরিসীমা ()। ব্যতিক্রম পরিচালনা ব্যবহারের মাধ্যমে গভীর বিরতি সম্পন্ন করা যেতে পারে। কোনও বিশেষ গঠন নেই, কারণ এর জন্য ওয়াইল ফাংশন ব্যবহার করা যেতে পারে। কোনও বিশেষ গঠন নেই, তবে ব্যবহারকারীরা সাধারণ লুপ ফাংশনগুলি সংজ্ঞায়িত করতে পারেন। সি + + 11 মানটি এর জন্য পরিসীমা-ভিত্তিক প্রবর্তন করে। এস. টি. এল-এ, প্রতিটি টেমপ্লেট ফাংশনের জন্য একটি এস. টি. ডিঃ: রয়েছে যা এস. টি. এল পাত্রে পুনরাবৃত্তি করতে পারে এবং প্রতিটি উপাদানের জন্য একটি ইউনারি ফাংশন কল করতে পারে। এই পাত্রে ম্যাক্রো হিসাবেও কার্যকারিতা তৈরি করা যেতে পারে। গণনা-নিয়ন্ত্রিত লুপিং একটি পূর্ণসংখ্যার ব্যবধান জুড়ে পুনরাবৃত্তি দ্বারা প্রভাবিত হয়; প্রস্থানের জন্য একটি অতিরিক্ত শর্ত অন্তর্ভুক্ত করে তাড়াতাড়ি প্রস্থান। আইফেল একটি সংরক্ষিত শব্দ পুনরায় চেষ্টা সমর্থন করে, তবে এটি ব্যতিক্রম পরিচালনায় ব্যবহৃত হয়, লুপ নিয়ন্ত্রণে নয়। জাভা মডেলিং ল্যাঙ্গুয়েজ (জে. এম. এল) আচরণগত ইন্টারফেস নির্দিষ্টকরণের ভাষা প্রয়োজন। লুপের রূপগুলি পূর্ণসংখ্যা হতে হবে; ট্রান্সফাইনাইট রূপগুলি সমর্থিত নয়। ডি অসীম সংগ্রহ এবং সেই সংগ্রহগুলির উপর পুনরাবৃত্তি করার ক্ষমতাকে সমর্থন করে। এর জন্য কোনও বিশেষ নির্মাণের প্রয়োজন হয় না। গো টু এবং পদ্ধতি ব্যবহার করে গভীর বিরতি অর্জন করা যেতে পারে। কমন লিস্প জেনেরিক সংগ্রহের ধারণার পূর্ববর্তী। কাঠামোগত অ-স্থানীয় নিয়ন্ত্রণ প্রবাহ অনেক প্রোগ্রামিং ভাষা, বিশেষ করে যারা প্রোগ্রামিংয়ের আরও গতিশীল শৈলীর পক্ষে, অ-স্থানীয় নিয়ন্ত্রণ প্রবাহের জন্য গঠন প্রদান করে। এগুলি কার্যকরকরণের প্রবাহকে একটি প্রদত্ত প্রসঙ্গের বাইরে ঝাঁপিয়ে পড়ে এবং কিছু পূর্ব ঘোষিত বিন্দুতে পুনরায় শুরু করে। শর্তাবলী, ব্যতিক্রম এবং ধারাবাহিকতা তিনটি সাধারণ ধরনের অ-স্থানীয় নিয়ন্ত্রণ গঠন; আরও বহিরাগতও বিদ্যমান, যেমন জেনারেটর, করোটিন এবং অ্যাসিঙ্ক কীওয়ার্ড। শর্তগুলি পিএল/আই-এর প্রায় 22টি মানক শর্ত রয়েছে (যেমন, জিরোডিভিড সাবস্ক্রিপ্ট্রেঞ্জ এন্ডফাইল) যা উত্থাপিত হতে পারে এবং যা দ্বারা বাধা দেওয়া যেতে পারেঃ শর্ত ক্রিয়া চালু; প্রোগ্রামাররা তাদের নিজস্ব নামযুক্ত শর্তগুলিও সংজ্ঞায়িত করতে এবং ব্যবহার করতে পারে। কাঠামোবদ্ধ না থাকলে, শুধুমাত্র একটি বিবৃতি নির্দিষ্ট করা যেতে পারে তাই অনেক ক্ষেত্রে নিয়ন্ত্রণের প্রবাহ কোথায় পুনরায় শুরু করা উচিত তা নির্ধারণ করার জন্য একটি জিওটিও প্রয়োজন। দুর্ভাগ্যবশত, কিছু বাস্তবায়নের স্থান এবং সময় উভয় ক্ষেত্রেই যথেষ্ট ওভারহেড ছিল (বিশেষ করে সাবস্ক্রিপ্ট্রেঞ্জ), তাই অনেক প্রোগ্রামার শর্ত ব্যবহার এড়ানোর চেষ্টা করেছিলেন। সাধারণ বাক্যবিন্যাসের উদাহরণগুলিঃ শর্তে জিওটিও লেবেল ব্যতিক্রম আধুনিক ভাষাগুলিতে ব্যতিক্রম পরিচালনার জন্য একটি বিশেষ কাঠামোগত গঠন রয়েছে যা জিওটিও বা (বহু-স্তরের) বিরতি বা রিটার্নের ব্যবহারের উপর নির্ভর করে না। উদাহরণস্বরূপ, সি + +-এ কেউ লিখতে পারেনঃ এখানে কোথাও চেষ্টা করুনঃ "'নিক্ষেপ করুন"' কিছু মান; "(কিছু ক্লাস এবং কিছুআইডি)" (কিছু ক্লাস অ্যাকশনের ক্যাচ মান) "(কিছু টাইপ এবং অন্যআইডি)" (কিছু টাইপ অ্যাকশনের ক্যাচ মান) "(কিছু টাইপ এবং অন্যআইডি)" (কিছু টাইপ অ্যাকশনের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান)" (কিছু টাইপের ক্যাচ মান) "(কিছু টাইপের ক্যাচ মান) যদি কোনও নির্দিষ্ট থ্রোয়ের সাথে কোনও ক্যাচ মেলে না, তবে সামঞ্জস্যপূর্ণ ক্যাচ না পাওয়া পর্যন্ত বা মূল প্রোগ্রামের শেষে না পৌঁছানো পর্যন্ত সাবরুটিন কল এবং/অথবা নেস্টেড ব্লকের মাধ্যমে নিয়ন্ত্রণ ফিরে আসে, যে সময়ে প্রোগ্রামটি একটি উপযুক্ত ত্রুটি বার্তা দিয়ে জোর করে বন্ধ করা হয়। সি + +-এর প্রভাবের মাধ্যমে, ক্যাচ হল জাভা বা সি #-এর মতো বর্তমানে জনপ্রিয় অন্যান্য ভাষায় প্যাটার্ন-ম্যাচিং ব্যতিক্রম হ্যান্ডলার ঘোষণা করার জন্য সংরক্ষিত মূল শব্দ। অ্যাডার মতো কিছু অন্যান্য ভাষা ব্যতিক্রম হ্যান্ডলার প্রবর্তনের জন্য কীওয়ার্ড ব্যতিক্রম ব্যবহার করে এবং তারপরে প্যাটার্ন মিলনের জন্য একটি ভিন্ন কীওয়ার্ড (যখন অ্যাডায় থাকে) ব্যবহার করতে পারে। অ্যাপলস্ক্রিপ্টের মতো কয়েকটি ভাষা ব্যতিক্রম হ্যান্ডলার বাক্যবিন্যাসে স্থানধারকদের অন্তর্ভুক্ত করে যখন ব্যতিক্রম ঘটে তখন স্বয়ংক্রিয়ভাবে বেশ কয়েকটি তথ্য বের করে। অ্যাপলস্ক্রিপ্ট থেকে অন এরর গঠন দ্বারা এই পদ্ধতির উদাহরণ দেওয়া হয়েছেঃ ত্রুটির ক্ষেত্রে মাই নম্বরকে মাই নম্বর/0 এ সেট করার চেষ্টা করুন ই নম্বর এন থেকে এফ থেকে টি আংশিক ফলাফল পিআর যদি (ই = "শূন্য দ্বারা ভাগ করা যায় না") তবে "আপনাকে অবশ্যই তা করতে হবে না" ডায়ালগটি প্রদর্শন করুন শেষ চেষ্টা করুন ডেভিড ওয়াটের 2004 সালের পাঠ্যপুস্তকটিও সিকোয়েন্সারগুলির কাঠামোর মধ্যে ব্যতিক্রম পরিচালনা বিশ্লেষণ করে (লুপ থেকে প্রাথমিক প্রস্থানের বিভাগে এই নিবন্ধে প্রবর্তিত)। ওয়াট উল্লেখ করেছেন যে একটি অস্বাভাবিক পরিস্থিতি, সাধারণত গাণিতিক ওভারফ্লো বা ইনপুট/আউটপুট ব্যর্থতার উদাহরণ যেমন ফাইল পাওয়া যায় না, এটি এক ধরনের ত্রুটি যা "কিছু নিম্ন-স্তরের প্রোগ্রাম ইউনিটে সনাক্ত করা হয়, তবে [যার জন্য] একজন হ্যান্ডলার আরও স্বাভাবিকভাবে একটি উচ্চ-স্তরের প্রোগ্রাম ইউনিটে অবস্থিত"। উদাহরণস্বরূপ, একটি প্রোগ্রামে ফাইলগুলি পড়ার জন্য বেশ কয়েকটি কল থাকতে পারে, তবে যখন কোনও ফাইল পাওয়া যায় না তখন সম্পাদন করার ক্রিয়াটি প্রোগ্রামের প্রশ্নযুক্ত ফাইলের অর্থের (উদ্দেশ্য) উপর নির্ভর করে এবং এইভাবে এই অস্বাভাবিক পরিস্থিতির জন্য একটি হ্যান্ডলিং রুটিন নিম্ন-স্তরের সিস্টেম কোডে অবস্থিত হতে পারে না। ওয়াটস আরও উল্লেখ করেছেন যে একক-প্রস্থান কাঠামোগত প্রোগ্রামিং বা এমনকি (বহু-প্রস্থান) রিটার্ন সিকোয়েন্সার হিসাবে কলারে স্ট্যাটাস ফ্ল্যাগ পরীক্ষার প্রবর্তন এমন একটি পরিস্থিতির ফলস্বরূপ যেখানে "অ্যাপ্লিকেশন কোডটি স্ট্যাটাস ফ্ল্যাগগুলির পরীক্ষার দ্বারা বিশৃঙ্খল হয়ে পড়ে" এবং "প্রোগ্রামার ভুলে যেতে পারে বা অলসভাবে একটি স্ট্যাটাস ফ্ল্যাগ পরীক্ষা করতে বাদ দিতে পারে। প্রকৃতপক্ষে, স্ট্যাটাস ফ্ল্যাগ দ্বারা প্রতিনিধিত্ব করা অস্বাভাবিক পরিস্থিতিগুলি ডিফল্টভাবে উপেক্ষা করা হয়! " ওয়াট উল্লেখ করেছেন যে স্ট্যাটাস ফ্ল্যাগ পরীক্ষার বিপরীতে, ব্যতিক্রমগুলির বিপরীত ডিফল্ট আচরণ থাকে, যার ফলে প্রোগ্রামটি বন্ধ হয়ে যায় যদি না প্রোগ্রামার স্পষ্টভাবে কোনও উপায়ে ব্যতিক্রমের সাথে মোকাবিলা করে, সম্ভবত এটিকে উপেক্ষা করার জন্য স্পষ্ট কোড যোগ করে। এই যুক্তিগুলির উপর ভিত্তি করে, ওয়াট এই উপসংহারে পৌঁছেছেন যে জাম্প সিকোয়েন্সার বা এস্কেপ সিকোয়েন্সারগুলি উপরে আলোচিত শব্দার্থের সাথে একটি নিবেদিত ব্যতিক্রম সিকোয়েন্সারের মতো উপযুক্ত নয়। অবজেক্ট পাস্কাল, ডি, জাভা, সি #এবং পাইথনে অবশেষে ট্রাই কনস্ট্রাক্টে একটি ধারা যুক্ত করা যেতে পারে। নিয়ন্ত্রণ যতই থাকুক না কেন, শেষ ধারার ভিতরে কোডটি কার্যকর করার নিশ্চয়তা দেওয়া হয়। কোড লেখার সময় এটি কার্যকর হয় যা প্রক্রিয়াকরণ শেষ হওয়ার সময় একটি ব্যয়বহুল সম্পদ (যেমন একটি খোলা ফাইল বা একটি ডাটাবেস সংযোগ) ত্যাগ করতে হবেঃ ফাইলস্ট্রিম স্টিম = নাল;// সি #উদাহরণ চেষ্টা করুন {স্টিম = নতুন ফাইলস্ট্রিম ("logfile.txt", FileMode.Create); রিটার্ন প্রসেসস্টাফ (স্টিম);// একটি ব্যতিক্রম নিক্ষেপ করতে পারে} অবশেষে {যদি (স্টিম! = নাল) stm.Close ();} যেহেতু এই প্যাটার্নটি মোটামুটি সাধারণ, সি #এর একটি বিশেষ সিনট্যাক্স রয়েছেঃ ব্যবহার করে (ভার স্টিম = নতুন ফাইলস্ট্রিম ("logfile.txt", FileMode.Create)) {রিটার্ন প্রসেসস্টাফ (স্টিম);// একটি ব্যতিক্রম নিক্ষেপ করতে পারে) বিবৃতি সহ পাইথন এবং File.open-এ রুবির ব্লক আর্গুমেন্ট একই প্রভাবের জন্য ব্যবহৃত হয়। উপরে উল্লিখিত সমস্ত ভাষাগুলি আদর্শ ব্যতিক্রম এবং যে পরিস্থিতিতে সেগুলি নিক্ষেপ করা হয় তা সংজ্ঞায়িত করে। ব্যবহারকারীরা তাদের নিজস্ব ব্যতিক্রমগুলি নিক্ষেপ করতে পারেন; প্রকৃতপক্ষে সি + + ব্যবহারকারীদের প্রায় যে কোনও ধরণের নিক্ষেপ এবং ধরার অনুমতি দেয়, যার মধ্যে ইন্টের মতো মৌলিক প্রকারগুলি রয়েছে, যেখানে জাভার মতো অন্যান্য ভাষাগুলি ততটা অনুমোদিত নয়। ধারাবাহিকতা অ্যাসিঙ্ক সি #5 একটি "সরাসরি শৈলীতে" অ্যাসিঙ্ক্রোনাস আই/ও সমর্থন করার জন্য অ্যাসিঙ্ক কীওয়ার্ড চালু করেছে। জেনারেটর জেনারেটর, যা সেমিকোরোটিন নামেও পরিচিত, সাধারণত একটি কীওয়ার্ড (ফলন বিবরণ) ব্যবহার করে সাময়িকভাবে একটি ভোক্তা পদ্ধতিতে নিয়ন্ত্রণের অনুমতি দেয়। অ্যাসিঙ্ক কীওয়ার্ডের মতো, এটি একটি "ডাইরেক্ট স্টাইল"-এ প্রোগ্রামিং সমর্থন করে। Coroutines এমন ফাংশন যা একে অপরকে নিয়ন্ত্রণ করতে পারে-থ্রেড ছাড়াই সমবায় মাল্টিটাস্কিংয়ের একটি রূপ। যদি প্রোগ্রামিং ভাষা ধারাবাহিকতা বা জেনারেটর সরবরাহ করে তবে কোরাউটিনগুলি একটি গ্রন্থাগার হিসাবে প্রয়োগ করা যেতে পারে-তাই অনুশীলনে কোরাউটিন এবং জেনারেটরের মধ্যে পার্থক্য একটি প্রযুক্তিগত বিশদ। অ-স্থানীয় নিয়ন্ত্রণ প্রবাহ ক্রস রেফারেন্স প্রস্তাবিত নিয়ন্ত্রণ কাঠামো 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 সালে জাহন দ্বারা প্রস্তাবিত হয়েছিল। একটি পরিবর্তিত সংস্করণ এখানে উপস্থাপন করা হয়েছে। ইভেন্টএ বা ইভেন্টবি বা ইভেন্টসি থেকে প্রস্থান করলে; এক্সএক্সএক্স ইভেন্টএ থেকে প্রস্থান করেঃ অ্যাকশনএ ইভেন্টবিঃ অ্যাকশনবি ইভেন্টসিঃ অ্যাকশনসি এন্ডেক্সিট; এক্সইট যখন এক্সএক্সএক্স-এর মধ্যে ঘটতে পারে এমন ইভেন্টগুলি নির্দিষ্ট করতে ব্যবহৃত হয়, তখন তাদের ঘটনা একটি বিবৃতি হিসাবে ইভেন্টের নাম ব্যবহার করে নির্দেশিত হয়। যখন কোনও ঘটনা ঘটে, তখন প্রাসঙ্গিক পদক্ষেপ নেওয়া হয়, এবং তারপর নিয়ন্ত্রণ শেষ হয়ে যাওয়ার ঠিক পরে চলে যায়। এই নির্মাণটি কিছু পরিস্থিতি প্রযোজ্য কিনা তা নির্ধারণ এবং সেই পরিস্থিতির জন্য নেওয়া পদক্ষেপের মধ্যে একটি খুব স্পষ্ট বিচ্ছেদ প্রদান করে। যখন এটি ধারণাগতভাবে ব্যতিক্রম পরিচালনার অনুরূপ, এবং অনেক ভাষায় ব্যতিক্রম বা অনুরূপ গঠন এই উদ্দেশ্যে ব্যবহার করা হয়। নিম্নলিখিত সহজ উদাহরণে একটি নির্দিষ্ট আইটেমের জন্য একটি দ্বি-মাত্রিক টেবিল অনুসন্ধান করা হয়। যদি টেবিল [I, J] = লক্ষ্য পাওয়া যায়; অনুপস্থিত; প্রস্থান পাওয়া যায়ঃ মুদ্রণ ("আইটেমটি টেবিলে নেই"); অনুপস্থিতঃ মুদ্রণ ("আইটেমটি টেবিলে নেই"); নিষ্ক্রিয়করণ; নিরাপত্তা সফ্টওয়্যারের একটি অংশকে আক্রমণ করার একটি উপায় হল একটি প্রোগ্রামের সম্পাদনার প্রবাহকে পুনর্নির্দেশ করা। এই আক্রমণগুলির বিরুদ্ধে প্রতিরক্ষার জন্য স্ট্যাক ক্যানারি, বাফার ওভারফ্লো সুরক্ষা, ছায়া স্ট্যাক এবং ভিটেবল পয়েন্টার যাচাইকরণ সহ বিভিন্ন নিয়ন্ত্রণ-প্রবাহ অখণ্ডতা কৌশল ব্যবহার করা হয়। আরও দেখুন শাখা (কম্পিউটার বিজ্ঞান) নিয়ন্ত্রণ-প্রবাহ বিশ্লেষণ নিয়ন্ত্রণ-প্রবাহ চিত্র নিয়ন্ত্রণ-প্রবাহ গ্রাফ নিয়ন্ত্রণ টেবিল করোটিন ঘূর্ণিঝড় জটিলতা ড্র্যাকন-চার্ট ফ্লোচার্ট গোটো জেরু, নিয়ন্ত্রণ কাঠামো শিখতে সহায়তা করে প্রধান লুপ পুনরাবৃত্তি সময়সূচী (কম্পিউটিং) স্প্যাগেটি কোড কাঠামোগত প্রোগ্রামিং সাবরুটিন সুইচ বিবৃতি, নিয়ন্ত্রণ প্রবাহকে শর্তসাপেক্ষভাবে পরিবর্তন করে আরও পড়ুন হোর, সি. এ. আর. "পার্টিশনঃ অ্যালগরিদম 63", "কুইকসোর্টঃ অ্যালগরিদম 64", এবং "ফাইন্ডঃ অ্যালগরিদম 65"। কম। এসিএম 4,321-322,1961। বাহ্যিক লিঙ্কগুলি গো টু স্টেটমেন্ট কনসিডার্ড হার্মফুল এ লিঙ্গুইস্টিক কন্ট্রিবিউশন অফ গোটো-লেস প্রোগ্রামিং আর্টিকেলস উইথ উদাহরণস্বরূপ অ্যাডা কোড