গত পর্বে আমরা শিখেছিলামঃ
আজ এই পর্বে আমরা শিখব কন্ট্রোল স্ট্রাকচারের ব্যাবহার। আগের পর্বেই আমি বলেছি কন্ট্রোল স্ট্রাকচার খুবই গুরুত্বপূর্ন এবং এটি পুরোপুরি শিখতে প্রচুর অনুশীলন দরকার।
গত পর্বে আমি উল্লেখ করেছিলাম কন্ট্রোল স্ট্রাকচারের নাম গুলো। তবে ভুল বশত আমি কয়েকটি স্ট্রাকচারের কথা লিখতে ভুলে গিয়েছিলাম। তাই আজ আপনাদের সুবিধার জন্যই সবগুলোর নাম নতুন করে লিখলাম। দেখুন একবারঃ
চলুন শুরু করি। ইচ্ছা করলে খাতা-কলম নিয়ে বসতে পারেন (যদি দরকার হয়)।
আপনার প্রোগ্রামে যদি হটাৎ করেই এমন কোন দরকার দেখা দেয় যে আপনার কিছু শর্তারোপ করতে হল বা কোন ক্ষেত্রে সিদ্ধান্ত গ্রহন করতে হল। একবার ভাবুনতো কিভাবে করবেন? আপনার এই দরকারের কথা চিন্তা করেই একাধিক সম্ভাবনার মধ্যে নির্দিষ্ট একটি বেছে নেয়ার সুবিধা দিয়েছে if-statement.
If-Statement এর লেখার রূপঃ
If (condition)
{
Tasks tobe completed
}
এখানে দেখুন if এর পরে ব্রাকেটে condition লেখা আছে, এর অর্থ হল আপনি যে শর্তের ভিত্তিতে কোন সিধান্ত গ্রহন করবেন সেই শর্ত এখানে লিখতে হবে। আর এর পরের লাইনে লেখা আছে Tasks to be completed-এর অর্থ হল আপনার শর্ত যদি সত্য হয় তাহলে আপনার প্রোগ্রাম কি করবে তার জন্য কোড লিখতে হবে।
এবার আসুন আমরা একটু গত পর্বের টিউনে ফিরে যাই। যদি মনে থাকে খুব ভাল আর মনে না থাকলে লিংকে ক্লিক করে গত পর্বটি অন্য ট্যাবে খুলে রাখুন।
সি শার্প ও ডট নেট প্রোগ্রামিং ৩য় পর্বঃ কন্ট্রোল স্ট্রাকচার ১
পূর্বের সমস্যা ১ ও ২ আলোচনাঃ
লক্ষ করুন যে আমি দুইটি সমস্যা নিয়ে আলোচনা করেছিলাম এবং প্রথম সমস্যাটি প্রবাহচিত্র দিয়ে আলোচনা করেছিলাম। সেই প্রবাহচিত্রে দেখা গিয়েছে আমার দুইটি স্থানে নির্দিষ্ট শর্তের ভিত্তিতে সিধান্ত গ্রহন করার প্রয়োজন দেখা দেয়।
প্রথমতঃ যখন ইউজার তার ইউজারনেম এবং পাসওয়ার্ড প্রদান করবেন তখন তা সঠিক না ভুল এই শর্তের সাপেক্ষে আমার সিধান্ত নিতে হবে যে সেই ইউজারকে কি প্রবেশাধিকার দেয়া হবে নাকি হবে না। এখন এই শর্তের সাপেক্ষে সিধান্ত গ্রহনের কাজে আমরা এই কন্ট্রোল স্টেটমেন্ট ব্যাবহার করতে পারি।
দ্বিতীয়তঃ দেখুন, যদি ইউজার ভুল তথ্য প্রদান করেন তাহলে তাকে আমরা পুনরায় সু্যোগ দিব তথ্য প্রদান করার জন্য- তবে শর্ত এই যে সু্যোগ সে কেবল ৫ বার পাবেন। তাই নিশ্চই তার ভুল তথ্য প্রদান সাপেক্ষে আমাকে অবশ্যই দেখতে হবে ইউজার কতবার ভুল তথ্য প্রদান করেছেন। সে কি ইতোমধ্যে ৫ বার ভুল তথ্য প্রদান করেছে্ন? যদি শর্ত সত্য হয় তাহলে তাকে আর কোন সুযোগ দেয়া যাবেনা নতুবা সে পুনরায় সুযোগ পাবেন। এই সিধান্ত গ্রহনের জন্য আমাকে if statement ব্যাবহার করতে পারি।
আসুন সমস্যা ২ নং এ দেখি আমাদের একই ভাবে সিধান্ত গ্রহন করতে হবে যে ছাত্রের মোট নাম্বারের শর্তের সাপেক্ষে সে পরীক্ষায় কৃতকার্য হয়েছে নাকি অকৃতকার্য। এখানেও কিন্তু একই ধরনের কাজ করতে হবে আমাদের।
আপনার মনে প্রশ্ন জাগতেই পারে একবার if statement শেখার পরে আবার if…else কেন দরকার? এই স্টেটমেন্ট আগেরটির মত হলেও এটি পূর্বের থেকে কিছুটা অধিক সুবিধা সম্পন্ন। বারবার অনুশীলন করলে আপনি নিজে থেকেই বুঝতে পারবেন যে প্রোগ্রামে কখন কোনটি ব্যাবহার করবেন।
এবার আসুন if…else লেখার রূপ:
If(condition)
{
Task 1
}
Else
{
Task 2
}
কিছুটা কি ধারনা হচ্ছে উপরের লেখ্যরূপ দেখে?
আসলে if...else এর সাথে if এর পার্থক্য হল যে if...else আপনাকে একটি বিকল্প পথে যাওয়ার সুযোগ দেয় কিন্তু if statement আপনাকে কিন্তু এ সুযোগটি দেবে না সরাসরি। একটু খোলসা করে বলি, if...else প্রথমে if এর শর্ত পরীক্ষা করে দেখে সেটি সত্যি না মিথ্যা, যদি সত্য হয় তাহলে if এর অধীনে লেখা কোড execute হবে নতুবা else কাজ করবে।
উপরে আলোচিত সমস্যার আলোকে যদি কথা বলি, তাহলে দেখুন কোথায় আমরা এই স্টাকচার ব্যাবহার করতে পারি।
সমস্যা ১ এ যখন ইউজারের তথ্য ভুল না সঠিক সিধান্ত নিতে হয় সেসময় আমরা if...else। এখানে যদি ইউজারের তথ্য সঠিক হয় অর্থাৎ if statement সত্য হয় তাহলে ইউজারকে প্রবেশাধিকার দেয়া হবে নতুবা else কার্যকর হবে এবং ইউজারকে পুনরায় তথ্য প্রদানের সুযোগ দিবে। এবার আশা করি কিছুটা হলেও বুঝতে পেরেছেন। আরো ধারনা স্বচ্ছ হবে যখন আমরা কোডিং এর মাধ্যমে কাজ গুলো দেখব।
সমস্যা ২ নং ও একইরকম বিধায় আলোচনা করলাম না।
কখনো প্রোগ্রামে একটি নির্দিষ্ট শর্ত সাপেক্ষে একই কাজ বারবার পুনরাবৃত্তি করার প্রয়োজন হয় তাকে প্রোগ্রামিং এর ভাষায় লুপিং (looping) বলা হয়। এই লুপিং করার জন্য চারটি কন্ট্রোল স্ট্রাকচার রয়েছে। এই পর্বে শুধু while নিয়ে আলোচনা করব।
লেখার নিয়মঃ
While(condition to be satisfied)
{
Your Task to be repeated
}
আবারো আমরা গত পর্বের সমস্যার আলোকে while এর কাজ ব্যাখ্যা করব। মনে করে দেখুন, ১ নং সমস্যা তে যখন ইউজার ভুল তথ্য প্রদান করে তখন তাকে পুনরায় ইউজার নেম ও পাসওয়ার্ড প্রদানের সুযোগ দেয়া হয় এবং শর্ত হচ্ছে একজন ইউজার ভুল তথ্য প্রদান সাপেক্ষে কেবল মাত্র ৫ বার এ সুযোগ পাবেন। তাহলে আপনি বুঝতে পারছেন এখানে প্রোগ্রাম কে শর্ত সাপেক্ষে একই কাজ বারবার করতে হচ্ছে। এর জন্য আপনি যদি ৫ বার একি কোড লেখেন তাহলেও প্রোগ্রাম ৫ বার এই কাজ করবে ঠিক মত তবে ভেবে দেখুনতো ইউজারের উপর আরোপিত এই শর্ত যদি উঠিয়ে নেই এবং বলি যে ইউজার ভুল তথ্য প্রদান করলে অসংখ্যবার সুযোগবার পাবেন পুনরায় তথ্য প্রদান করার। তাহলে বলুনতো কতবার আপনি একই কোড লিখবেন, ৫ বার, ১০ বার, ১০০ বার…
আবার লক্ষ করুন দ্বিতীয় সমস্যায় আমি উল্লেখ করেছিলাম ১০০ ছাত্রের পরীক্ষার ফলাফল বার করতে হবে আর সেজন্য আপনার ১০০ ছাত্রের বিষয়ভিত্তিক নাম্বার ইনপুট দিতে হবে। আপনি কি ইনপুটের কাজ ১০০ বার লিখে করবেন? এখন অধিকাংশ স্কুল বা কলেজে ছাত্রের সংখ্যা প্রায় হাজার ছাড়িয়ে যায়। সেক্ষেত্রে আপনি কি করবেন?
আসলে এভাবে এই সমস্যা সমাধান করা সম্ভব নয়। এই কাজের জন্য যেকোন এক ধরনের লুপিং স্টেটমেন্ট নিয়ে কাজ করতে হবে। আমি আপনাদের সেই কাজ করে দেখাবো while দিয়ে।
আমাদের কোডিং শুরু করি। প্রথমে চিন্তা করুন আমাদের কয়টি ডাটা টাইপ ও ভ্যারিয়েবেল লাগবে। লক্ষ করুন, ইউজার নেম ও পাসওয়ার্ড অবশ্যই String হবে এবং আর একটি int ভ্যারিয়েবেল লাগবে যা কতবার ইউজার লগ-ইন করার চেষ্টা করছে সেটি count করবে। আসলে এই ভ্যারিয়েবেল কাউন্টার হিসেবে কাজ করবে।
int log_in_count=1;
String user_name, password;
এখানে দেখুন log_in_count ভ্যারিয়েবেল এ 1 assign করা হয়েছে। এখানে 0 assign না করে 1 কেন assign করলাম না সেটি ব্যাখ্যা করি। আসলে ভেবে দেখুন আমি বলেছিলাম আপনাদের যে ইউজার কে কেবল ৫ বার সুযোগ দেয়া হবে। প্রথমবার যেহেতু একবার লগ-ইন করার সুযোগ ইউজার ইতোমধ্যে নিয়ে নিয়েছে তাহলে ভুল ইউজারনেম ও পাসওয়ার্ড এর সাপেক্ষে আরো ৪ বার সুযোগ পেতে পারে। এই কারনেই আগে থেকেই কাউন্টার 1 এ রেখেছি। এরপর যতবার ভুল তথ্য প্রদান ততবার 1 করে বাড়বে এবং 5 এর চেয়ে বেশি হলেই বন্ধ হয়ে যাবে। পরবর্তিতে আরো ভাল করে বুঝতে পারবেন।
এরপর,
while(log_in_count<=5)
এখানে দেখুন while loop এর condition এ লেখা হয়েছে log_in_count<=5- এর অর্থ হল, প্রত্যেকবার while loop কাজ করার সময় এই শর্ত দেখা হবে যে log_in_count এর মান ৫ এর সমান বা কম আছে কিনা। যদি থাকে তাহলে while loop কাজ করবে অন্যথায় কাজ করবে না। এই লুপের ভেতরে আমি বাকি কাজ করব।
সম্পূর্ন কোড দেয়া হল, এবার দেখুন while loop এর অভ্যন্তরে আমি ইউজারনেম ও পাসোয়ার্ড ইনপুট নেয়ার কাজ করেছি। যেহেতু ReadLine() method ব্যাবহার করেছি সে কারনেই আপনাকে প্রতিবার কোন ইনপুট দিয়ে Enter চেপে new line এ যেতে হবে নাইলে ইনপুট কনসোলের মাধ্যমে আসবে না। এক্ষেত্রে আপনি Read() মেথড ব্যাবহার করতে পারবেন না। কারন, Read() কেবল মাত্র int type accept করে। String নিতে পারে না।
ইনপুট নেয়ার পর আমার কাজ হল- ইনপুট চেক করে দেখা, আর সে কারনেই if…else এর ব্যাবহার করেছি।
if (user_name == "admin" && password == "admin1234")
{
Console.WriteLine("Welcome " + user_name + ". You are authorized user");
break;
}
এখানে দেখা যাচ্ছে যদি ইউজারনেম ও পাসোয়ার্ড সঠিক হয়, তাহলে আমি ইউজারকে প্রবেশাধিকার দেব আর সেকারনেই মেসেজ প্রিন্ট করেছি।
Console.WriteLine("Welcome " + user_name + ". You are authorized user");
দেখুন, মেসেজের মাঝে user_name ভ্যারিয়েবেল ব্যাবহার করেছি। এটা হল, যখন ইউজার সঠিক তথ্য প্রদান করবে তখন তাকে প্রদত্ত মেসেজে আমি তার ইউজার নেম প্রিন্ট করব। C# এ কোন মেসেজে ভ্যারিয়েবেল এর প্রাপ্ত মান দেখানোর জন্য এভাবেই লেখা হয়। আরেকটি লাইন দেখুন একটি keyword break ব্যাবহার করা হয়েছে। এর কাজ আমরা এই টিউনের শেষে দেখব।
যদি ইউজার নেম সঠিক হয় তবে এই অংশ কাজ করবে নতুবা else কার্যকর হবে। আসুন দেখি, else এর কাজ।
else
{
Console.WriteLine("\nAccess Denied! User Name or Password is Incorrect");
Console.WriteLine("\nYou Will Get " + (5 - log_in_count) + " chances to log in");
}
এখানে ইউজারকে প্রবেশাধিকার দেয়া হয়নি সম্বলিত মেসেজ দেয়ার পর, তাকে দেখানো হচ্ছে তাকে আর কতবার সুযোগ দেয়া যাবে। এখানে মোট সুযোগ (৫) থেকে log_in_count এর মান বিয়োগ করে দেখানো হয়েছে আর কতবার সুযোগ প্রদান করা হবে। যদি, log_in_count এর মান ৫ হয়, তাহলে মেসেজে দেখাবে,
You Will Get 0 chances to log in
এই if…else এর কাজের শেষে log_in_count variable এর মান 1 করে বাড়ানো হয়েছে।
log_in_count++
অথবা এভাবেও লিখতে পারেন-
log_in_count=log_in_count+1
এই স্টেটমেন্ট এর মাধ্যমে ভ্যারিয়েবেলের মান কে ১ করে বাড়ানো হয়। ++ কে increment operator বলা হয়। increment/decrement operator গুলো কি কি সে সম্পর্কে অনুশীলন শেষে আলোচনা করব।
আশা করি, এটুকু বুঝতে পেরেছেন। আপনার কোডিং শেষ। এবার দেখি রান করে। Ctrl+F5 চাপুন,
এখন যদি ভুল তথ্য প্রদান করি তাহলে কি হবে একবার দেখিঃ
লক্ষ করুন ভুল তথ্য প্রদান করার জন্য, মেসেজ দিয়েছে এবং আর কয়বার সুযোগ রয়েছে সেটিও উল্লেখ করেছে (লাল মার্ক করা স্থান লক্ষ করুন)
২ নং সমস্যা নিজেরা করুন, ধারনা আরো স্বচ্ছ হবে। তবে পরবর্তিতে আপনাদের পরামর্শ অনুসারে ২ নং এর সমাধান আমি আপলোড করে দিব। সেখান থেকে মিলিয়ে নিতে পারবেন।
কিছু শেষ কথা না জানলেই নয়ঃ
কোড আবার লক্ষ করুন, কিছু কিছু মেসেজে আমি ‘\n’ ব্যাবহার করেছি যা কোড রান করার সময় স্ক্রিনে প্রিন্ট হয়না। এই \n কে বলা হয় New Line Character. এগুলোকে বলা হয় Escape Sequence Characters. কিছু Escape Sequence Character নিচে দেয়া হলঃ
\n | New Line. Prints New Line |
\t | Horizontal Tab. Move cursor to the next tab space |
Null Character. | |
\r | Carriage Return |
আবার লক্ষ করি আমরা if statement এর অধীনে একটি কীওয়ার্ড break ব্যাবহার করেছি। break keyword ব্যাবহার করা হয় কোন লুপ চলাকালীন সময়ে লুপ থেকে বার হয়ে আসার জন্য। উপরের উদাহরনে দেখুন, ইউজার যখন তার সঠিক তথ্য প্রদান করবে তখন আমার লুপের ভেতর থাকা অবাঞ্ছনীয়। কিন্তু তখনো কাউন্টারের মান ৫ বা তার বেশি হবে না তাই স্বাভাবিক ভাবে লুপ থেকে বার হওয়া সম্ভব নয়। কিন্তু এই প্রয়োজন মেটানোর জন্যই break ব্যাবহার করেছি। এই কীওয়ার্ড পাওয়া মাত্রই প্রোগ্রাম কন্ট্রোলার লুপ থেকে বার হয়ে আসবে।
আজ এ পর্যন্ত। ভাল থাকবেন সবাই। শুভ কামনা রইল। কেমন লাগল জানাবেন। আর যদি কোডিং করতে গিয়ে কোথাও কোন সমস্যা হয় তাহলে যোগাযোগ করতে পারেনঃ
অথবা, ফেসবুকে আমাকে পাবেনঃ
আমি জ্যোতি। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর 11 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 17 টি টিউন ও 98 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 2 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমি জ্যোতি চৌধুরী। কম্পিউটার সাইন্স এন্ড ইঞ্জিনিয়ারিং এর ছাত্র। মিলিটারি ইন্সটিটিউট অফ সাইন্স এন্ড টেকনোলজি, মিরপুর ক্যান্টনমেন্ট এ পড়াশোনা করছি। ভাল লাগে বন্ধুদের সাথে আড্ডা দিতে, কম্পিউটার প্রযুক্তি সম্পর্কে জানতে। আগ্রহ আছে সফটওয়্যার ডেভেলপমেন্ট, প্রোগ্রামিং ও ওয়েব ডেভেলপমেন্টের প্রতি। স্বপ্ন দেখতে ভালবাসি। স্বপ্ন কে বাস্তবে রুপায়ন করতে পছন্দ করি।
অনেক ভালো হচ্ছে… চালিয়ে যান। আমরা আছি।