সদ্য প্রোগ্রামিং জগতে আসা অনেকেই return keyword টির কাজ বুঝতে পারে না । তাদের কথা ভেবে এই পোস্ট লিখা । return keyword টি function এর সাথে ওতপ্রোতভাবে জড়িত । তাই এখানে function এর মাধ্যমেই আলোচনা করার চেষ্টা করলাম ।
মনে করো, তোমার খুব চা খেতে ইচ্ছে করছে কিন্তু তুমি চা বানাতে জানো না বা পারো না । তুমি তোমার ছোট বোনকে চা বানিয়ে দিতে বললে । তোমার ছোটবোন তোমাকে বললো, যদি তুমি তাকে চা বানানোর উপকরণগুলো এনে দাও, তবেই সে তোমাকে চা বানিয়ে দিবে !
এবার এসো আমরা একটা তালিকা বানাই । চা বানাতে কী কী লাগবে ? চা পাতা, পানি, দুধ, চিনি ! তুমি যে চা খেতে চাইছো, সে চা কী ধরণের বস্তু ? নিশ্চয়ই তরল । এবার এই তথ্যগুলো নিয়ে আমরা একটা function লিখার চেষ্টা করবো ।
একটা function লিখতে হলে সেই function এর শুরুতে প্রথম যে শব্দ বা keyword টি লিখতে হয়, সেটি হলো ঐ function এর return data type অর্থাৎ function টি কী ধরণের data তোমাকে return করবে, সেটি । তো, আমরা যে চা খাওয়া নিয়ে কথা বলছিলাম, সে ক্ষেত্রে return type কী হতে পারে ? অবশ্যই তরল !
এরপর লিখতে হয় ঐ function টির একটি যুতসই নাম, নিজের ইচ্ছেমতো নাম । তবে নামটা এমন হওয়া উচিত যেন নামটা দেখলে কিছুটা বুঝা যায় যে function টা দিয়ে কী কাজ করা হচ্ছে । নামের পর প্রথম বন্ধনীর (parentheses) ভেতর লিখতে হয় আমরা যা চাইছি সেটি বানাতে প্রয়োজনীয় উপকরণ, এই উপকরণগুলোকে বলা হয় parameter । তারপর দ্বিতীয় বন্ধনীর (curly braces) ভেতর প্রয়োজনীয় কার্য সম্পাদন করে একদম শেষ আমরা কী তৈরি করলাম বা কী পেলাম, সেটা return keyword এর পরেই লিখে দিতে হয় ।
বক বক অনেক হলো । এবার কাজে আসা যাক ! উপরের নিয়মানুযায়ী আমরা যদি function টা লিখি, তাহলে তা এমন দেখাবে –
তরল চা_বানাও(কঠিন চা_পাতা, তরল পানি, তরল দুধ, কঠিন চিনি)
{
তরল চা = চা_পাতা + পানি + দুধ + চিনি;
return চা;
}
এবার আমরা প্রোগ্রামিং সংক্রান্ত কিছু সাধারণ উদাহরণ দেখবো । মনে করো, আমরা একটা প্রোগ্রাম লিখবো যেটায় দু’টি সংখ্যার যোগফল প্রিন্ট করে দেখাবে । তবে যোগের কাজটা আমরা main() function এ না করে আমাদের তৈরি একটা function এ করবো এবং সেই function কে আমরা main() function থেকে call করবো ।
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #include <stdio.h>
int add(int x, int y);
int main()
{
int a, b, sum;
printf("Enter two integers : ");
scanf("%d%d", &a, &b);
sum = add(a, b);
printf("Sum = %d", sum);
return 0;
}
int add(int x, int y)
{
int z = x + y;
return z;
}
|
উপরের source code এর 7 নম্বর লাইনে দেখো, আমরা তিনটি int type variable নিয়েছি । যার মধ্যে a এবং b এর input নেওয়া হচ্ছে 9 নম্বর লাইনে । 10 নম্বর লাইনেই আমাদের নিজেদের function কে call করা হলো । তোমার মনে প্রশ্ন আসা স্বাভাবিক, এইভাবে কেনো call করলাম !
এইবার একটু আগের চা বানানোর উদাহরণটায় ফিরে যাই । তোমার ছোটবোন যখন তোমায় চা বানিয়ে দিবে, সেটা খেতে হলে তো তোমার চায়ের কাপ কিংবা মগ দরকার । ঠিক একই রকমভাবে, আমরা যে এখানে দু’টি int type সংখ্যার যোগ করতে চাইছি অন্য একটা function এর মাধ্যমে যেই function আমাদেরকে ঐ দু’টি সংখ্যার যোগফল ফেরত দিবে বা পাঠাবে, সে সংখ্যাটা receive করতে হলেও তো আমাদের একটা পাত্র দরকার । আর সেই পাত্রটা হলো আরেকটা int type variable, যেটা আমি এখানে নিয়েছি sum !
10 নম্বর লাইনে দেখো । আমাদের নিজেদের function add() call করেছি input হিসেবে নেওয়া a ও b variable সহ । এবার সরাসরি 15 নম্বর লাইনে চলে যাও । ঐখান থেকে আমাদের function টি শুরু । প্রথমেই int keyword দিয়ে বুঝানো হচ্ছে এই function একটি int type data return করবে । তারপর আমাদের function এর নাম । এরপর প্রথম বন্ধনীর ভেতর এই function টি কাঁচামাল হিসেবে কী receive করবে তা । এখানে লিখেছি (int x, int y) । এর মানে এই function দু’টি int type data receive করবে । 17 নম্বর লাইনটায় না বুঝার কিছু নেই । অন্য একটি int variable z নিয়ে তারমধ্যে কাঁচামাল হিসেবে পাওয়া দু’টি int type data’র যোগফল রাখছি । এবং তার পরের লাইনে সেই যোগফল অর্থাৎ z ফেরত পাঠাচ্ছি return z; এই statement টি লিখে । return z; এই লাইনের মাধ্যমে বুঝানো হচ্ছে, আমাদের তৈরি করা এই add() function টি-কে এই প্রোগ্রামের কোথাও ঠিকঠাক মতো ডাকা হয় (মানে দু’টি int সহ), তবে তাকে যেখানে ডাকা হচ্ছে ঠিক সেখানে add() function ঐ দু’টি int type data’র যোগফল ফেরত দিবে ।
main() function এর 11 নম্বর লাইনটা দেখো । আমরা add() function এর মাধ্যমে return অর্থাৎ ফেরত পাওয়া value টি print করছি । এবার source code এর 3 নম্বর লাইনে দৃষ্টি নাও । খটকা বা খুত খুত লাগছে ? একেবারে সাধারণ এবং সহজ একটি লাইন । 3 এবং 15 নম্বর লাইনের মধ্যে মিল খুঁজে পাওয়া যাচ্ছে ? মূল কাজ শুরুর আগে আমরা যদি নিজেদের তৈরি কোনো function ব্যবহার করি, তাহলে সে function গুলোর প্রথম লাইন অর্থাৎ return type name(parameter) এর সাথে একটি সেমিকোলন দিয়ে লিখে নিবো । এই জিনিসটাকে বলা হয় function এর prototype । অর্থাৎ আমরা add() function টির prototype লিখেছি 3 নম্বর লাইনে আর function টি define করেছি 15 নম্বর লাইন থেকে । তবে function টা এভাবেও লিখা যেতো –
1
2
3
4 | int add(int x, int y)
{
return (x + y);
}
|
অর্থাৎ, নতুন কোনো variable না নিয়ে যোগফল সরাসরি return করা হচ্ছে ।
সব function ই কোনো data return করবে, তা কিন্তু নয় । যদি কোনো কিছু return না করে, তাহলে return type হিসেবে লিখতে হবে void । নিচের উদাহরণটা খেয়াল করো –
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #include <stdio.h>
void print_msg();
int main()
{
print_msg();
return 0;
}
void print_msg()
{
printf("Hello World !");
}
|
দেখো, main() function এ আমাদের তৈরি করা print_msg() function call করেছি যা কোনো কিছু return করবে না, আবার এর কোনো কাঁচামাল অর্থাৎ parameter এরও প্রয়োজন নেই । এর কাজ হচ্ছে, যখন একে ডাকা হবে, তখন শুধুমাত্র Hello World ! লিখাটি print করে দেওয়া ।
আশা করছি, return এর কাজ সম্পর্কে কিছুটা হলেও বুঝাতে সক্ষম হয়েছি ।
অনেকের একটি সাধারণ প্রশ্নের উত্তর দিয়ে শেষ করছি ।
main() function এর শেষে কেনো return 0 লিখা হয় ?
আমরা যখন কোনো প্রোগ্রাম execute বা run করি, তখন operating system থেকে সরাসরি সেই প্রোগ্রামের main() function কে call করা হয় । যখন সেই প্রোগ্রামের কাজ শেষ হয়, তখন কিছু data main() function থেকে return করা হয় যেটা থেকে বুঝতে পারা যায়, প্রোগ্রামটি ঠিকমতো কাজ করেছে কি করেনি । সাধারণত 0 অর্থাৎ return 0 দিয়ে বুঝানো হয়, প্রোগ্রাম সফলভাবে কাজ করেছে, 0 ছাড়া অন্য কোনো int type value দিয়ে বুঝানো হয়, প্রোগ্রাম ঠিকমতো কাজ করেনি । এগুলো যেহেতু int type value, তাই main() function এর শুরুতে int লিখা হয় ।
thanks for sharing this. this is helpful.
ReplyDeleteThank you for giving me some extra info about C sir☺️
ReplyDeleteIt was helpful
ReplyDelete