পাইথন কন্ট্রোল ফ্লো (Control flow)

লিখেছেন: কাজী মুশফিকুর রহমান || সফটওয়্যার প্রকৌশলী, টেকনিয়াস (সফটওয়্যার নির্মাণ প্রতিষ্ঠান) || তারিখঃ 03 মে, 2024


প্রোগ্রামের ফ্লো কন্ট্রোল করা

কন্ট্রোল (control) অর্থ হলো নিয়ন্ত্রণ করা। এর দ্বারা ডিফল্ট বিহেভিয়ার (বৈশিষ্ট) উদ্দেশ্য নয়, বরং উদ্দেশ্য হলো স্বতন্ত্র বৈশিষ্ট, যা ইউজার নির্ধারণ করে দিবে। আর প্রোগ্রামিং এর ক্ষেত্রে স্বতন্ত্র বৈশিষ্ট পাওয়া যায় কিছু ফ্যাক্টরের মাধ্যমে। ফ্লো (flow) অর্থও প্রবাহ, গতি। এটি প্রোগ্রামের এক্সিকিউশনের ধারাবাহিকতা নির্দেশ করে, অর্থাৎ স্টেটমেন্টের কোনটির পরে কোনটি এক্সিকিউট (রান) হবে সেই ক্রম (সিরিয়াল) বলে দেয়। ডিফল্টভাবে প্রোগ্রামের প্রত্যেকটি স্টেটমেন্টই নির্দিষ্ট ক্রমানুসারে এক্সিকিউট হয়। সুতরাং উপরের দুটি শব্দের সমন্বিত রূপ হলো: কন্ট্রোল ফ্লো’ (কন্ট্রোল + ফ্লো = কন্ট্রোল ফ্লো)। যার অর্থ হলো, প্রত্যাশিত ফলাফল পেতে প্রোগ্রাম (এক্সিকিউশন) এর গতি নিয়ন্ত্রণ করা।

‘কন্ট্রোল ফ্লো’ এর মাধ্যমে কোডের ইন্সট্রাকশন (কমান্ড) সমূহের এক্সিকিউশনের গতি নিয়ন্ত্রণ করা হয়। আর কাজটি স্বয়ংক্রিয়ভাবে হয়না, বরং কন্ট্রোল টুল বা ফ্যাক্টর এর সাহায্যে হয়ে থাকে। যেসকল ফ্যাক্টরের কারণে প্রোগ্রামের গতি প্রভাবিত হয় সেগুলো হলো: কন্ডিশনাল স্টেটমেন্ট, if-else, ফর লুপ, হোয়াইল লুপ, এক্সেপশন ইত্যাদি। পরবর্তীতে আমি এগুলো নিয়ে বিস্তারিত আলোচনা করব।

 

 

উপরের চিত্রে ‘কন্ট্রোল ফ্লো’ ওসিকোয়েন্স ফ্লো’ এর মধ্যে পার্থক্য দেখানো হয়েছে। কন্ট্রোল ফ্লোতে প্রথমে প্রোগ্রাম এক্সিকিউশন শুরু হয়, তারপর টার্ন চেক করুন’ অপশনে এসে এটি চেক করে যে, তাকে কোনদিকে মুভ করতে হবে। তাকে যেদিকের নির্দেশনা  দেয়া হয়, সে সেদিকেই মুভ করে। এক্ষেত্রে প্রোগ্রামার তার প্রোগ্রাম লিখার সময়ই কোডের ফ্লো কেমন হবে তা ডিফাইন করে দেয়। টার্ন চেক করুন’ অপশনে যদি তাকে প্রথমে কাজ ৩ শুরু করার নির্দেশ দেয়া হয় তাহলে এটি কাজ ৩ শুরু করে, কাজ ১ নয়। এভাবে নির্দেশনা মোতাবেক এক্সিকিউশন সম্পন্ন হয় এবং প্রোগ্রামের গতি নিয়ন্ত্রিত হয়। কিন্তু সিকোয়েন্স ফ্লোতে ব্যাপারটি ভিন্ন, এক্ষেত্রে এক্সিকিউশন শুরু হওয়ার পরে ধারাবাহিকভাবে কাজগুলো সম্পন্ন করার পরে   (শুরু - কাজ ১ - কাজ ২ - কাজ৩ - শেষ) এক্সিকিউশন শেষ হয়ে যায়।

 

কন্ডিশনাল স্টেটমেন্ট: if এর ব্যবহার

‘ if ’ ব্যবহার করে পাইথন প্রোগ্রামের ফ্লো (গতি) নিয়ন্ত্রণ করা যায়। ‘ if ’ অর্থ: যদি। এর পরে একটি কন্ডিশন (শর্ত) থাকে, যদি এটি সত্য হয়, তাহলে এর অধীনের স্টেটমেন্টটি এক্সিকিউট (রান) হয়। আর কন্ডিশনটি মিথ্যা হলে, স্টেটমেন্টটি এক্সিকিউট হয় না। এভাবে এর মাধ্যমে একাধিক কন্ডিশনও মেইনটেইন করা যেতে পারে। প্রোগ্রামার ইচ্ছা করলে ‘ if ’ এর পরে এক বা একাধিক ‘else’ ব্লক ব্যবহার করতে পারে, আবার এটি স্কিপ ও করতে পারে। নিচে এর  স্ট্রাকচার ব্যবহার উদাহরণসহ দেখানো হলো:

স্ট্রাকচার:

if ( কন্ডিশন ):

            স্টেটমেন্ট ……

প্রথমে  ‘ if ’, তারপর ফার্স্ট ব্রাকেটের মধ্যে কন্ডিশন, তারপরে কোলন ‘ : ’ দিতে হবে।

‘ if ’যদি এই কন্ডিশনটি সত্য হয়, তাহলে কাজটি করুন (স্টেটমেন্ট বা কোডটি রান করুন)।

অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজে (যেমন: C, জাভা) সেকেন্ড ব্রাকেট ‘{ }’ যে কাজ করে পাইথনে কোলন ‘:’ সেই কাজ করে। কোলন এবং ইন্ডেন্টেশন ব্যবহার করে কোডের স্কোপ বা ব্লক তৈরি করা হয়।

কোড:

number1 = 25

number2 = 20

if number1 > number2: 

    print('number1 is greater than number2') 

 

উপরের কোডের প্রথম লাইনে number1 ভ্যারিয়েবলের মধ্যে ভ্যালু 25 এসাইন করেছি। দ্বিতীয় লাইনে number2 ভ্যারিয়েবলের মধ্যে ভ্যালু 20 এসাইন করেছি। তৃতীয় লাইনে ‘ if ’ এর পরে একটি কন্ডিশন (number1 > number2 অর্থ: যদি number1, number2 থেকে  বড় হয়) দিয়ে চেক করেছি যে, যদি 25, 20 থেকে বড় হয়, তাহলে চতুর্থ লাইনটি প্রিন্ট হবে। যেহেতু এক্ষেত্রে কন্ডিশনটি true, তাই চতুর্থ লাইনটি প্রিন্ট হয়েছে। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

number1 is greater than number2

 

‘ if ’  দিয়ে একাধিক কন্ডিশন চেক করা

এখন আমরা ‘ if ’  দিয়ে দুটি কন্ডিশন চেক করব। যেখানে ‘ if ’ এর পরে দুটি কন্ডিশন থাকবে এবং এদের মাঝে একটি ‘and’ অপারেটর ব্যবহার করব। যদি উভয় কন্ডিশনটি true হয়, তাহলেই কেবল চুড়ান্তভাবে কন্ডিশনটি true বলে গণ্য হবে। এভাবে ‘and’ ব্যবহার করে অনেকগুলি কন্ডিশন চেক করা যায়। পরবর্তীতে আমি ‘পাইথনে লজিক্যাল অপারেটর’ শিরোনামে এ বিষয়ে বিস্তারিত আলোচনা করব।

কোড:

number1 = 25

number2 = 20

# if 25 > 20 and 25 < 30:

if number1 > number2 and number1 < 30: 

    # It will be executed if both conditions are true.

    print('number1 is greater than number2 but less than 30')

 

উপরের কোডের প্রথম লাইনে number1 ভ্যারিয়েবলের মধ্যে ভ্যালু 25 এসাইন করেছি। দ্বিতীয় লাইনে number2 ভ্যারিয়েবলের মধ্যে ভ্যালু 20 এসাইন করেছি। তৃতীয় ও চতুর্থ লাইনের কোড কমেন্ট করা। পঞ্চম লাইনে ‘ if ’ এর পরে দুটি কন্ডিশন (number1 > number2 and number1 < 30 )  দিয়ে চেক করেছি যে, 25 যদি 20 থেকে বড় হয় এবং 30 থেকে ছোট হয়, তাহলে ষষ্ঠ লাইনটি প্রিন্ট হবে। যেহেতু এক্ষেত্রে কন্ডিশনটি true, তাই ষষ্ঠ লাইনটি প্রিন্ট হয়েছে। এখন উপরের কোডটি রান করলে নিচের মত আউটপুট পাব।

আউটপুট:

number1 is greater than number2 but less than 30

 

বিশেষ দ্রষ্টব্য: পরবর্তীতে আমি কন্ট্রোল ফ্লো এর অন্যান্য ফ্যাক্টরগুলো (if-else, for loop, while loop, function, exception etc) নিয়ে বিস্তারিত আলোচনা করব