return keyword কী ?

সদ্য প্রোগ্রামিং জগতে আসা অনেকেই 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 লিখা হয় ।

Comments

  1. thanks for sharing this. this is helpful.

    ReplyDelete
  2. Thank you for giving me some extra info about C sir☺️

    ReplyDelete

Post a Comment

Popular posts from this blog

[Python] Introduction

EOF মানে কী ?