if-else

Standard

if-else সি প্রোগ্রামিং এর অত্যন্ত গুরুত্বপূর্ণ একটি বিষয়। if-else এর সাহায্যে একটি প্রোগ্রাম কোন একটি শর্তের ভিত্তিতে কি করবে সেটি নির্ধারণ করে দেওয়া হয়। ব্যাপারটি অনেকটা ইংরেজি ব্যকরণের if-else এর মতই। একটি উদাহরণের সাহায্যে বিষয়টি পরিষ্কার করা যাক।

ধরা যাক কোন একটি স্কুলের কোন একটি পরীক্ষার ফল দিয়েছে। সেখানে যারা ৮০ অথবা এর উপরে নাম্বার পেয়েছে তাদের গ্রেড হবে A। তাহলে এটিকে সহজ বাংলায় বলতে হলে যেভাবে বলা হবে তা হল, “যদি নাম্বার ৮০ এর সমান অথবা বেশি হয় তাহলে গ্রেড হবে A।” এই কথাটিকেই যদি ইংরেজিতে বলা হয় তাহলে বলা হবে, “If number is greater than or equal to 80 then the grade will be A.” খুবই সহজ সাধারণ একটি কথা। আমাদের C তেও কথাটা এতটাই সহজ এবং সাধারণ। তবে একটা বিষয় হল যে আমরা মানুষ বলে এখানে কথাটা বলে দিতে পারলাম। কিন্তু কম্পিউটার তো মানুষ না, তাই সে তো এভাবে কথা বলতে পারবে না। সে মনিটরে আউটপুট দেখাবে। সেটা দেখাবে printf ফাংশনের সাহায্যে। printf কিভাবে কাজ করে তা ইতোমধ্যে জানা থাকার কথা। যাই হোক, আমরা দেখলাম কিভাবে বাংলা এবং ইংরেজি ভাষায় ঘটনাটা প্রকাশ করা যায়। এখন দেখা যাক C তে কিভাবে প্রকাশ করা যায়। C তে আমরা লিখব এভাবে,

[code language=”cpp”]
code:
if( number >= 80 ) {
printf( "A" );
}
[/code]

এখানে C এর সিন্ট্যাক্স খেয়াল রাখা আবশ্যক। প্রথমে লিখব if, এরপর প্রথম ব্র্যাকেট শুরু, এর ভিতরে লিখব শর্ত, যেটি সত্য হলে কাজটি সম্পাদিত হবে। শর্তটি লেখার পর ব্র্যাকেট শেষ। এরপর কোন সেমিকোলন (;) হবে না। এটি খেয়াল রাখতে হবে। এরপর দ্বিতীয় ব্র্যাকেট শুরু, এর ভিতরে যে কাজটি সম্পাদন করতে হবে সেটি লেখা থাকবে এবং সব শেষে দ্বিতীয় ব্র্যাকেট শেষ হবে। C তে কোন একটি স্টেটমেন্ট (সাধারণ ভাষায়, কাজ) এর পর সেমিকোলন (;) হয়। এখানে যেহেতু একটাই স্টেটমেন্ট আছে printf( “A” ), তাই এটার পরে সেমিকোলন হয়েছে।

C তে লেখার সময় আমরা যে স্পেস, এন্টার বা ট্যাব দেই, এগুলো কম্পাইলারের কাছে অর্থহীন। এগুলো দেওয়া হয় প্রোগ্রামটি সহজে পড়তে পারার জন্য। যথাযথভাবে স্পেস, এন্টার এবং ট্যাব ব্যবহারের মাধ্যমে একটি প্রোগ্রাম অনেকখানি সহজবোধ্য হয়। এটি একজন ভালো প্রোগ্রামারের গুণ হিসেবে বিবেচিত হয়।

এখন যদি এমন হয় যে কোন একটি শর্ত সত্য হলে আমাকে একটি নয়, একাধিক কাজ করতে হবে, তখন কি হবে? সেটিও খুব সহজ। if( ) এর পরে যে দ্বিতীয় বন্ধনী থাকে { } এই দুইটির মধ্যে যতগুলো স্টেটমেন্ট লেখা হবে সবগুলোই সম্পাদিত হবে যদি if এর ভিতরের শর্তটি সত্য হয়। উদাহরণের মাধ্যমে দেখা যাক। আবারও ধরা যাক কোন একটি স্কুলের পরীক্ষার ফল দিয়েছে। যদি কেউ এখানে ৩৩ এর নিচে পেয়ে থাকে তবে সে অকৃতকার্য বলে বিবেচিত হবে। এইজন্য যে প্রোগ্রামটি লেখা হবে সেটি নাম্বার ৩৩ এর কম হলে দেখাবে “Failed” এবং আরও দেখাবে “You need to take the test again.” এক্ষেত্রে প্রোগ্রামটি নিম্নরূপ হবে,

[code language=”cpp”]
code:
if( number < 33 ) {
printf( "Failed\n" );
printf( "You need to take the test again." );
}
[/code]

এখানে স্পষ্টভাবে দেখা যাচ্ছে দুইটি printf আছে। এরা দুইটি স্টেটমেন্ট হিসেবে কাজ করছে। এদেরকে একটি ব্লকের ভিতরে রাখা হয়েছে। ব্লক হচ্ছে কতগুলো স্টেটমেন্টের সমষ্টি যেই স্টেটমেন্টগুলো { } এর মধ্যে রাখা থাকে। if এর শর্তটি সত্য হলে এর জন্য যে ব্লকটি থাকবে তার মধ্যের সবগুলো স্টেটমেন্ট সম্পন্ন হবে। এটি হল বেসিক সিন্ট্যাক্স। এখানে দুইটি printf দিয়ে বোঝানো হয়েছে। বাস্তবে কোন একটি সমস্যার সমাধান করতে হলে এরকম ক্ষেত্রে অনেককিছুই থাকতে পারে। কোন একটি শর্ত সত্য হলে অনেককিছুই সংঘটিত হতে পারে। তখন কি কি সংঘটিত হবে সেটি খেয়াল রেখে সুনির্দিষ্টভাবে সেগুলোকে ব্লকের মধ্যে রাখতে হবে।

অর্থাৎ সাধারণভাবে C এর সিন্ট্যাক্স হবে এরকম,

[code language=”cpp”]
code:
if( শর্ত ) {
স্টেটমেন্ট ১ ;
স্টেটমেন্ট ২ ;
. . . ;
. . . ;
স্টেটমেন্ট n ;
}
[/code]

আরেকটি বিষয় হল যে if এর শর্তের স্থানে একাধিক শর্ত থাকতে পারে। একাধিক শর্তকে লজিকাল অপারেটরের মাধ্যমে একসাথে if এর শর্তের স্থানে লেখা হয়। লজিকাল অপারেটরগুলোর মধ্যে আছে && এবং | | । এই দুইটিই বাইনারি অপারেটর, অর্থাৎ এদের দুই পাশে দুইটি এক্সপ্রেশন থাকে যাদেরকে নিয়ে এরা কাজ করে। && দিয়ে বোঝানো হয় যে এর দুইপাশের দুটি শর্তই সত্য হতে হবে। তাহলে সমগ্র শর্তটিকে সত্য হিসেবে গণ্য করা হবে। যেকোন একটিও যদি সত্য না হয় তবে সমগ্র শর্তটিই মিথ্যা বলে বিবেচিত হবে। অর্থাৎ তখন আর if এর ভিতরের কোন কাজ সম্পাদিত হবে না। যেমন ধরা যাক কোন পরীক্ষায় যদি ৭০ এর সমান বা বেশি এবং ৮০ এর কম নাম্বার কেউ পায় তবে তার গ্রেড হবে B। সহজ ইংরেজিতে এটি হবে, “If number is greater than or equal to 70 and less than 80, then show grade B.” C তে এটি কি হবে এতক্ষণে সকলের বুঝে ফেলার কথা, তাও দেখে নেয়া যাক,

[code language=”cpp”]
code:
if( number >= 70 && number < 80 ) {
printf( "B" );
}
[/code]

এখানে আসলে যেটি হচ্ছে তা হল কম্পাইলার যখন কন্ডিশন টেস্ট করতে যাচ্ছে তখন সে প্রথমে && এর বাম পাশের কন্ডিশনটি পরীক্ষা করছে। সেটি যখন সত্য হয় তখন সে পরের কন্ডিশনটি পরীক্ষা করছে। দুইটাই যখন সত্য হয় তখন সে ধরে নেয় যে সমগ্র কন্ডিশন সত্য হয়েছে, অর্থাৎ এখন সে ভিতরের স্টেটমেন্টগুলো এক্সিকিউট করতে পারবে। এভাবে কন্ডিশনের ভিতরে কেবল দুইটি নয়, দুইয়েরও অধিক শর্ত থাকতে পারে। if( number1 > 80 && number2 > 70 && number3 > 60) এরকম একটি if প্রোগ্রামে থাকা অস্বাভাবিক কিছু না। এক্ষেত্রে যা হবে তা হল কম্পাইলার একটা একটা করে শর্ত দেখবে। প্রথমে সে প্রথম && এর দুইপাশের শর্তদুটি পরীক্ষা করে দেখবে। তারা উভয়েই সত্য হলে সমগ্রটি মিলে সত্য হবে। এই সমগ্র অংশটুকু পরবর্তী && এর বামপাশের শর্ত হিসেবে কাজ করবে। যেহেতু বামপাশেরটি ইতোমধ্যে সত্য হয়েছে অতএব এখন যদি শুধু ডানপাশেরটি সত্য হয় তাহলেই সমগ্র শর্ত সত্য হয়ে যাবে। দুইটি && দিয়ে আলাদা করা যে তিনটি শর্ত এখানে রয়েছে এর কোন একটিও যদি মিথ্যা হয় তাহলেই if এর শর্ত সামগ্রিকভাবে মিথ্যা হয়ে যাবে।

এই তো গেল && এর ব্যবহার, এখন দেখা যাক | | কিভাবে কাজ করে। | | এর দুইপাশে যে দুইটি শর্ত থাকে সেগুলোর যেকোন একটিই যদি সত্য হয়ে যায় তাহলেই সমগ্র শর্তটি সত্য বলে বিবেচিত হবে। অর্থাৎ যদি এমন থাকে,

[code language=”cpp”]
code:
if( number1 < 80 || number2 < 50 ) {
printf( "B" );
}
[/code]

তাহলে যেটি হবে তা হল, প্রথমে বামপাশের শর্তটি পরীক্ষা করা হবে। সেটি যদি সত্য না হয় তাহলে ডানপাশের শর্তটি পরীক্ষা করা হবে। এটি যদি সত্য হয়ে যায় তাহলে সমগ্র শর্তটি সত্য বিবেচিত হবে। আবার আগেই যদি ডানপাশের শর্তটি সত্য হয়ে যেত তাহলে এরপরের শর্তটি কম্পাইলার আর পরীক্ষাই করে দেখত না। কারণ সেটি সত্য হোক আর না হোক, একটা তো সত্য হয়েই গিয়েছে, তাই সমগ্র শর্তটিই সত্য হবে! এখানে && এবং | | এর মধ্যের পার্থক্য সুস্পষ্ট। && থাকলে প্রতিটি শর্ত পরীক্ষা করে দেখা হয় যে সবগুলো সত্য কিনা। একটিও যদি মিথ্যা হয় তাহলেই সমগ্রটি মিথ্যা বিবেচিত হয় এবং কোন একটি মিথ্যা পেলে এর পরবর্তীগুলো আর পরীক্ষা করে দেখা হয় না। অন্যদিকে, | | এর ক্ষেত্রে যতক্ষণ পর্যন্ত সত্য না পাওয়া যায় ততক্ষণ পর্যন্ত শর্তগুলো পরীক্ষা করতে থাকে এবং একটিও যদি সত্য পেয়ে যায় তখন এর পরেরগুলো আর পরীক্ষা করার কোন প্রয়োজন থাকে না। কারণ পরেরগুলো সত্য হোক আর না হোক, একটি যেহেতু সত্য হয়ে গিয়েছে অতএব সমগ্রটিই সত্য। if এর শর্তের এই অংশটি && এবং | | সমন্বয়েও হতে পারে। সেক্ষেত্রে C এর নিয়ম অনুযায়ী প্রথমে && গুলোর উভয়পাশ নিয়ে কাজ হবে এবং তারপর | | গুলোর উভয়পাশ নিয়ে কাজ হবে এবং সবশেষে সামগ্রিকভাবে একটি সত্য বা মিথ্যা ফল পাওয়া যাবে।

পরিশেষে একটি সম্পূর্ণ প্রোগ্রামের মাধ্যমে দেখা যাক কিভাবে if কাজ করে।

[code language=”cpp”]
code:
#include
int main()
{
int number;

scanf( "%d", &number );
if( number >= 50 ) {
printf( "Passed\n" );
printf( "Congratulation!\n" )
}
printf( "Program Complete.\n" );

return 0;
}
[/code]

উপোরক্ত প্রোগ্রামটি যখন এক্সিকিউট হবে তখন প্রথমে scanf এর মাধ্যমে একটি নাম্বার ইনপুট নিয়ে সেটিকে number নামক একটি ইন্টিজার ভেরিয়েবল এর মধ্যে রাখা হবে। এরপর যখনই if আসবে তখন এর শর্ত পরীক্ষা করা হবে। পরীক্ষা যদি সত্য হয় অর্থাৎ যদি number এর মান 50 এর বড় হয় তাহলে এর ভিতরের কাজগুলো সম্পন্ন হবে। অতএব Passed এবং Congratulations! লেখা আসবে। এরপর প্রোগ্রামটি ঐ ব্লক থেকে বের হয়ে যাবে এবং এর পরবর্তী কাজটি সম্পাদন করবে, অর্থাৎ লেখা দেখাবে Program Complete. এখন যদি এক্ষত্রে শর্তটি সত্য না হয় তাহলে if এর জন্য যে ব্লক রয়েছে তার ভিতরে প্রোগ্রাম প্রবেশ করবে না এবং তথাপি ভিতরের কোন স্টেটমেন্ট এক্সিকিউট হবে না। সরাসরি প্রোগ্রাম if এর ব্লক যেখানে শেষ হয়েছে সেখানে চলে যাবে এবং পরবর্তী স্টেটমেন্ট এক্সিকিউট করবে।

অতএব এই পর্যন্ত আলোচনার সার সংক্ষেপ যা দাঁড়ায় তা হল,
– কোন শর্তাধীন কাজ থাকলে সেটিকে if এর মাধ্যমে লিখতে হয়।
– শর্ত একটি বা একাধিক হতে পারে।
– if এর শর্তগুলো সামগ্রিকভাবে সত্য হলে তবেই কাজটি সম্পাদিত হয়।
– if( শর্ত ) এরপরে কোন সেমিকোলন (;) হবে না

বিঃদ্রঃ সকলেরই ঠিকমত স্পেস, এন্টার এবং ট্যাব ব্যবহার করা উচিৎ। অনেকে হয়তো এগুলো ঠিকমত ব্যবহার না করার কারণে নিজের প্রোগ্রাম নিজেই ঠিকমত বুঝে উঠতে পারে না। কোথা থেকে if এর ব্লক শুরু হল, কোথায় যেয়ে if এর ব্লক শেষ হল, কোথায় এর পরবর্তী স্টেটমেন্ট শুরু হল এগুলো ঠিকমত বুঝতে না পারায় অনেক সাধারণ ভুল হয়ে যায় নিজের অজান্তে। হয়তো if এর ব্লকের বাইরে লিখতে হবে এমন কোন স্টেটমেন্ট ভুল করে ভিতরে চলে এসেছে। সমগ্র প্রোগ্রামটিই তখন ভুল হয়ে যায়। অতএব সকলেরই যথাযথভাবে স্পেস, এন্টার, ট্যাব ইত্যাদি হোয়াইট স্পেস ব্যবহারের অভ্যাস করা উচিৎ।

if-else এর প্রথম পর্বে বলা হয়েছে if( ) কিভাবে কাজ করে। এই পর্বে দেখা যাক if( ) এর সাথে else এবং else if( ) কিভাবে কাজ করে। if এর কাজ যেমন একেবারেই সহজ এবং সাধারণ, তেমনিভাবে else-ও খুব একটা জটিল কিছু না, বরং খুবই সহজ।

ঘুরেফিরে যেহেতু আমরা একটা ভাষা শিখছি, তাই আবারও একে আমাদের বাংলা এবং ইংরেজির সাথে তুলনা করে দেখা যাক কিরকম দাঁড়ায়। ধরা যাক, কোন একটি পরীক্ষায় যারা ৫০ বা তার উপরে নাম্বার পাবে তারা পাস করবে এবং যারা ৫০ এর কম পাবে তারা ফেল করবে। তাহলে এটাকে আমরা বাংলায় বলব, “যদি নাম্বার ৫০ বা এর চেয়ে বেশি হয় তাহলে দেখাবে ‘Passed’, অন্যথায় দেখাবে ‘Failed’।” এখন এই কথাটা যদি আমরা ইংরেজিতে বলি তাহলে বলব, “If number is greater than or equal to 50, show ‘Passed’, else show ‘Failed’.” একেবারেই সরল একটা কথা। এখন দেখা যাক এই কথাটাকেই যদি C তে লেখা হয় তাহলে সেটা কেমন হবে।

[code language=”cpp”]
code:
if( number >= 50 ) {
printf( "Passed\n" );
}
else {
printf( "Failed\n" );
}
[/code]

প্রথমে সিন্ট্যাক্স খেয়াল করা যাক। if( ) এর সিন্ট্যাক্স ইতোমধ্যে জেনে যাওয়ার কথা, না জানলে ১ম পর্ব পড়লেই জানা যাবে। যখন if এর সাথে else ব্যবহার করা হবে তখনও if এর অংশটুকুর সিন্ট্যাক্স যেমন থাকার তেমনই থাকবে। সাথে শুধু else এর অংশটুকু যুক্ত হবে। প্রথমে else থাকবে, এরপর দ্বিতীয় ব্র্যাকেট শুরু, তারপর else এর জন্য যে স্টেটমেন্টগুলো থাকার সেগুলো একটার পর একটা থাকবে, এবং সবশেষে দ্বিতীয় ব্র্যাকেট শেষ হবে।

ইতোমধ্যেই বুঝে যাওয়ার কথা else দিয়ে কি বোঝানো হচ্ছে। if এর জন্য একটা শর্ত দেওয়া থাকবে। সেই শর্তটি যদি সত্য হয় তাহলে if এর শর্তের পর { } এর মধ্যে যে স্টেটমেন্টগুলো আছে, সেগুলো সম্পাদিত হবে। আর যদি সেটি সত্য না হয় তাহলে else এর ভিতরে যে স্টেটমেন্টগুলো আছে সেগুলো সম্পাদিত হবে। ব্যাপারটি খুবই সহজ, বাংলা কথার সাথে মিলিয়ে দেখলেই বোঝা যাবে। ৫০ বা এর উপরে নাম্বার পেলে প্রিন্ট করবে Passed। যদি ৫০ বা এর উপরে নাম্বার হয়, তাহলে তো শুধুই Passed প্রিন্ট করা হবে, Failed প্রিন্ট করার প্রশ্নই আসে না। অতএব একবার শর্ত সত্য হয়ে গেলে else এর ভিতরে কি আছে সেটির আর কোন তাৎপর্য নেই। কিন্তু যদি if এর শর্ত সত্য না হত, তাহলেই এক্ষেত্রে Failed প্রিন্ট করা হত। অতএব, শর্ত সত্য না হলে তখনি কেবলমাত্র else এর ভিতরে যেটি আছে সেটি সংঘটিত হবে।

এখানে একটি কথা গুরত্বপূর্ণ, সেটি হল যে if এর শর্ত যদি পূরণ হয়ে যায় তাহলে প্রোগ্রামটি else এর ব্লকের ভিতরেই আর প্রবেশ করবে না। আর যদি if এর শর্ত সত্য না হয়, তাহলে প্রোগ্রামটি if এর ব্লকটিতে ঢুকবে না, সে সরারসরি এরপরে যদি else থাকে তাহলে সেখানে চলে যাবে, না থাকলে অন্য যে স্টেটমেন্ট থাকবে সেটি এক্সিকিউট করা শুরু করবে।

এখন এই কোডটাকে একটু ভিন্নভাবে লিখে দেখা যাক কি হতে পারে। নিচের কোড দুটি দেখা যাক।

[code language=”cpp”]
code:
int main() | int main()
{ | {
int number; | int number;
|
scanf( "%d", &number ); | scanf( "%d", &number );
if( number >= 50 ) { | if( number >= 50 ) {
printf( "Passed\n" ); | printf( "Passed\n" );
} | }
else { |
printf( "Failed\n" ); | printf( "Failed\n" );
} |
|
return 0; | return 0;
} | }
|
/**** Fig: A ****/ | /**** Fig: B ****/
[/code]

Fig: A এবং Fig: B এর মধ্যে তফাৎ কোথায়? প্রথমটিতে উপর্যুক্ত উদাহরণটি দেখানো হয়েছে, দ্বিতীয়টিতে else ব্যবহার না করে printf ব্যবহার করা হয়েছে। দুইটি ক্ষেত্রেই কি হবে তা বোঝার জন্য একটু যৌক্তিক চিন্তাই যথেষ্ট। প্রথমটিতে যা হবে তা এই লেখার প্রথমদিকেই বলা হয়েছে। যদি নাম্বার ৫০ বা এর বেশি হয় তাহলে ‘Passed’ প্রিন্ট করবে, যদি ৫০ এর কম হয় শুধু মাত্র তখনই ‘Passed’ প্রিন্ট না করে ‘Failed’ প্রিন্ট করবে। আর দ্বিতীয় প্রোগ্রামটির ক্ষেত্রে যেটি হবে তা হল, প্রথমে টেস্ট করা হবে number ভেরিয়েবলটি কি ৫০ এর সমান বা বড় কিনা। যদি সমান বা বড় হয়, অর্থাৎ যদি শর্ত সত্য হয় তাহল ‘Passed’ প্রিন্ট করবে এবং তারপর এর পরবর্তীতে যে স্টেটমেন্ট আছে সেটি এক্সিকিউট করবে অর্থাৎ ‘Failed’ও প্রিন্ট করবে! এর কারণ কি? এর কারণ হল এখানে কোন else ব্যবহার করা হয়নি। else এর কাজই হল এই ফারাক তৈরি করে দেওয়া। যদি একটি হয়ে যায় তাহলে যেন পরেরটি না হয়, আবার যদি প্রথমটি না হয়, তাহলে যেন পরেরটি হয়। অর্থাৎ একটি শর্ত সত্য নাকি মিথ্যা তার সাপেক্ষে যখন দুটি ভিন্ন কাজ সংঘটিত হতে হবে তখন if এবং সেই সাথে else ব্যবহার করতে হয়। else ব্যবহার না করলে কি হবে তা তো দেখাই গেল। অতএব প্রয়োজন অনুযায়ী কখন কিভাবে if এবং else ব্যবহার করতে হবে তা যুক্তিসংগতভাবে চিন্তা করে ব্যবহার করতে হবে। নতুবা প্রোগ্রামে ঠিকমত কাজ করবে না।

যে উদাহরণগুলো দেখানো হল সেগুলোতে একটি শর্ত সত্য হলে কি হবে, এবং সত্য না হলে কি হবে তা দেখানো হয়েছে। C তে অনেকগুলো শর্তসাপেক্ষে যদি অনেকগুলো কাজ থাকে তাহলে if এবং else এর মাঝে else if( ) ব্যবহারের সুযোগ আছে। এটির ব্যবহার বলতে গেলে if এর মতই, কেবল পার্থক্য এখানেই যে এটির আগে একটি if থাকতে হয়, যেমনটি থাকতে হয় else এর আগে। একটি উদাহরণের সাহায্যে বিষয়টি দেখা যাক। আবারও পরীক্ষার ফল নিয়ে আসি 😛 । কোন একটি পরীক্ষার নাম্বার যদি ৮০ বা এর বেশি হয় তাহলে প্রিন্ট করবে ‘A’। যদি সেটি না হয় তাহলে যদি নাম্বার যদি ৫০ বা এর বেশি হয় তাহলে প্রিন্ট করবে ‘Passed without A’। আর সেটিও যদি না হয় তাহলে প্রিন্ট করবে ‘Failed’। এটির কোড নিচে দেওয়া হল,

[code language=”cpp”]
code:
if( number >= 80 ) {
printf( "A\n" );
}
else if( number >= 50 ) {
printf( "Passed without A\n" );
}
else {
printf( "Failed\n" );
}
[/code]

এবার দেখা যাক এখানে কি হয়। প্রথমে if এর শর্তটি টেস্ট করা হয়। সেটি যদি সত্য হয়ে যায় তাহলে প্রিন্ট হবে ‘A’। এখন যৌক্তিকভাবেই এটা বোঝা যাচ্ছে যে নাম্বার যদি ৮০ বা তার উপরে হয় তাহলে শুধু A ই প্রিন্ট হবে, ‘Passed without A’ বা ‘Failed’ প্রিন্ট হওয়ার প্রশ্নই আসে না। তাই এরপরে অবস্থিত যতগুলো else if বা else রয়েছে তার কোনটিই আর টেস্ট করা হবে না। সরাসরি তার পরবর্তী স্টেটমেন্টে চলে যাবে। যদি শর্তটি সত্য না হয় অর্থাৎ নাম্বার ৮০ বা এর বেশি না হয় তাহলে – ১) নাম্বার ৫০ বা তার বেশি হতে পারে, সেক্ষেত্রে প্রিন্ট করা হবে ‘Passed without A’ এবং ২) নাম্বার ৫০ এর কম হতে পারে, সেক্ষেত্রে প্রিন্ট করা হবে ‘Failed’। নাম্বার যদি ৫০ এর সমান বা এর বেশি হয়, তাহলে ‘Passed without A’ প্রিন্ট হবে। সেটি বলার জন্যই else if ব্যবহার করা হয়েছে। অতএব else if তখনই ব্যবহার করা হয় যখন একটি শর্ত সত্য না হলে আরেকটি শর্ত সত্য হল কিনা দেখা হয়। আর যদি দ্বিতীয়টিও সত্য না হত তাহলে প্রিন্ট করা হত ‘Failed’।

সামগ্রিকভাবে প্রোগ্রামটি কিভাবে কাজ করে তা আরেকবার দেখা যাক। প্রোগ্রামে যদি কোন শর্তাধীন কাজ থাকে তাহলে সেটিকে if এর মাধ্যমে লেখা হয়। if এর শর্তটি সত্য হলে কাজটি সম্পাদিত হবে এবং এর পর যতগুলো else if বা else আছে তার কোনটিতেই আর প্রবেশ করা হবে না, শর্ত সত্য না হলে যদি আবারও কোন শর্তাধীন কাজ থাকে যেটি কেবলমাত্র পূর্ববর্তী শর্তগুলো সত্য না হলে এবং আরও কোন একটি শর্ত সত্য হলে কাজ করবে তখন else if ব্যবহার করা হয়। এই শর্তটি সত্য হয়ে গেলে এর পরবর্তী আর কোন else if বা else এ প্রোগ্রাম প্রবেশ করে না। এভাবে একটির পর একটি চলতে থাকবে। অতএব যখন কোন একটি প্রোগ্রাম লেখা হবে তখন কোন কাজটি কখন কোন শর্তের অধীনে সংঘটিত হবে তা যুক্তিসংগতভাবে চিন্তা করে নিতে হবে। এই শর্ত হলে এটি হবে, সত্য না হয়ে যদি আবার এই শর্তটি সত্য হয় তাহলে এটি হবে, সেটিও যদি সত্য না হয় তাহলে আবার এই শর্ত সত্য হলে এটি হবে, …, এর কোনটিই যদি না হয় তাহলে এটি হবে – এভাবে পর্যায়ক্রমিকভাবে চিন্তা করে সাজিয়ে নিতে হবে।

সর্বশেষ একটি উদাহরণের মাধ্যমে পর্যায়ক্রমিকভাবে কিভাবে if, else if এবং else ব্যবহার করে প্রোগ্রাম লেখা হয় তা দেখা যাক। আবারও পরীক্ষার ফল প্রসঙ্গ 😛 । একটি পরীক্ষায় যদি কেউ ৮০ বা তার উপরে নাম্বার পায় তাহলে প্রিন্ট করবে ‘A’, যদি ৭০ এর সমান বা বেশি কিন্তু ৮০ এর কম হয় তাহলে ‘B’, যদি ৬০ এর সমান বা বেশি কিন্তু ৭০ এর কম হয় তাহলে ‘C’, যদি ৫০ এর সমান বা বেশি কিন্তু ৬০ এর কম হয় তাহলে ‘D’ এবং যদি এর কোনটিই না হয় অর্থাৎ ৫০ এর কম হয় তাহলে প্রিন্ট করবে ‘F’। প্রোগ্রামটি হবে নিম্নরূপ,

[code language=”cpp”]
code:
#include

int main()
{
int number;

scanf( "%d", &number );
if( number >= 80 ) {
printf( "A\n" );
}
else if( number >= 70 ) {
printf( "B\n" );
}
else if( number >= 60 ) {
printf( "C\n" );
}
else if( number >= 50 ) {
printf( "D\n" );
}
else {
printf( "F\n" );
}

return 0;
}
[/code]

সবারই এখন বুঝে যাওয়ার কথা কিভাবে এটি কাজ করবে। একটি একটি শর্ত পরীক্ষা হবে এবং সেটি সত্য না হলে তার পরেরটি পরীক্ষা হবে। কোনটিই যদি সত্য না হয় তাহলে শেষে অবস্থিত else এর ভিতর যা আছে সেটি সম্পাদিত হবে। এখানে নাম্বার যদি ৭০ এর সমান বা বেশি হয় এবং ৮০ এর কম হয় তাহলে ‘B’ প্রিন্ট করার কথা। অতএব শর্তটি হওয়ার কথা else if( number >= 70 && number < 80 ) । কিন্তু শর্তের মধ্যে লেখা আছে else if( number >= 70 ) । এর কারণ একটু চিন্তা করলেই বোঝা সম্ভব। প্রথমেই বলা আছে if( number >= 80 ) । তাই যদি নাম্বার ৮০ এর সমান বা বড় হয়ে যায় তাহলে তো প্রথমের শর্তটিই সত্য হয়ে গেল। তখন তো আর পরবর্তী শর্তগুলো পরীক্ষাই হবে না। পরবর্তী শর্তগুলোতে কেবলমাত্র তখনই আসবে যখন আগেরগুলো মিথ্যা হবে। যেহেতু আগের শর্তটি মিথ্যা হয়ে এসেছে, তাই এটা নিশ্চিতভাবেই বলা যায় যে নাম্বার ৮০ এর কম হবেই। অন্যথায় প্রোগ্রাম এখানে আসতই না! তাই শুধু শুধু বাড়তি করে number < 80 লেখার কোনই প্রয়োজন নেই। পরবর্তী প্রতিটি শর্তের ক্ষেত্রে একই ঘটনা ঘটবে।

এখানে একটি বিষয় উল্লেখযোগ্য, সেটি হল, যখন কোন প্রোগ্রামের কোডে কোথাও else ব্যবহার করা হয়, তখন সেই else টি তার একই ব্লকে অবস্থিত ঠিক পূর্ববর্তী if এর জন্য কাজ করে। অর্থাৎ else টি যেই ব্লকে রয়েছে সেই একই ব্লকে তার ঠিক আগে যে if রয়েছে সেটির শর্ত যদি সত্য না হয় তাহলে ঐ else কাজ করবে। if যেই ব্লকের ভিতরে রয়েছে, else যদি সেই একই ব্লকের ভিতরে না থেকে অন্য কোন ব্লকে থাকে তাহলে প্রোগ্রামটি ঠিকমত কাজ করবে না। else if এর ক্ষেত্রেও একই কথা প্রযোজ্য। আসলে ব্যাপারটি বুঝতে সমস্যা হতে পারে, এভাবে লিখে বোঝানোটা একটু মুশকিল। তাই আমি বলব এটি নিয়ে যদি কারও কোন কনফিউশন থাকে তাহলে তার উচিৎ হবে একটি কোড লিখে সেখানে যতভাবে if এবং else ব্যবহার করা যায় (নিজের মন মত 😛 ) ততভাবে লিখে লিখে রান করে দেখা যে কখন কি হয়। Practically প্রতিটা জিনিস নিজের হাতে করে দেখার চেয়ে ভাল উপায় আসলে নেই।

  • Rana

    শেষের কথাটা বুঝলামনা

    • if(condition) {
      …if(condition) {
      ……//code
      …}
      …else {
      ……//code
      …}
      }
      else {
      …//code
      }

      এরকম ক্ষেত্রে কোন else কোন if যে জন্য কাজ করবে সেটা বলার চেষ্টা করেছি। এখানে প্রথম যে else আছে সেটি কাজ করবে দ্বিতীয় if এর জন্য। কোন একটা else যেই ব্লকের মধ্যে আছে, সেই ব্লকের মধ্যে অবস্থিত তার ঠিক আগের if এর জন্য সে কাজ করবে।