ফাংশনগুলি একটি মেশিনের মতো যারা কিছু ফাংশনালিটি পারফর্ম করে এবং কোনো টাইপের রেজাল্ট প্রডিউস করে। যেমন, মেশিন কিছু ইনপুট নেয়, সেটি প্রসেস করে এবং একটি আউটপুট প্রডিউস করে; একইভাবে, ফাংশন কিছু ভ্যালু নেয়, সেগুলোর ওপর অপারেশন করে এবং আউটপুট প্রডিউস করে। ম্যানুয়ালি একজন ব্যক্তি মেশিনে ইনপুট দিলে মেশিন তার ফাংশনালিটি শুরু করে; একইভাবে প্রোগ্রামার ফাংশনটি কল করলে সেটি এক্সিকিউট হতে শুরু করে।
ফাংশনগুলো বিভিন্ন ভাষায় ভিন্ন নামে পরিচিত হতে পারে, কিন্তু সেগুলোর দুটি সাধারণ বৈশিষ্ট্য রয়েছে −
সেগুলো প্রসেস করার জন্য ইনস্ট্রাকশনগুলির একটি ক্রম ধারণ করে
ইনস্ট্রাকশনগুলো একটি নাম দ্বারা আইডেন্টিফাই করা হয়, যা ফাংশনকে রেফার করে
ফাংশন কেন ব্যবহার করা হয়?
পুনঃব্যবহারযোগ্যতা− একই ফাংশনালিটি একাধিক জায়গায় প্রয়োজন হলে সেরা পদ্ধতি হল ফাংশনটি একবার তৈরি করে একাধিকবার কল করা, বরং একই ফাংশনালিটি প্রদানকারী ফাংশন বারবার ডিক্লেয়ার করা। পুনঃব্যবহারযোগ্যতা হল ফাংশন যে সবচেয়ে বড় ফিচার বা সুবিধা প্রদান করে।
কোডে মডুলারিটি − ফাংশন আপনার কোডকে সুন্দর ও স্বচ্ছ করে তোলে কারণ main() ফাংশনে অনেক লাইন কোড লিখার বদলে, ফাংশন ডিক্লেয়ার করে কোডকে আরও ক্লিয়ার এবং পড়া-লেখা সহজ করে তোলে।
মডিফিকেশনে সহজতা − যদি ভবিষ্যতে কোডে কোনো পরিবর্তন আনতে হয় তবে একাধিক জায়গায় পরিবর্তন করার বদলে প্রোগ্রামার শুধু ফাংশনটিতে পরিবর্তন আনবে। অতএব, আমরা বলতে পারি যে ফাংশন ডেটা রिडান্ডেন্সি কমানোতে সাহায্য করে।
অবস্ট্রাকশন প্রদান করে − প্রাসঙ্গিক নামের ফাংশন দিয়ে বোঝা যায় সেটি কী করতে সাপেক্ষা, বরং সেটি কীভাবে করছে সেটি না জানলেও চলে। উদাহরণস্বরূপ, C-তে "maths.h" হেডার ফাইলে pow() ফাংশন রয়েছে। আমরা সরাসরি এই ফাংশনটি ব্যবহার করে পাওয়ার ভ্যালু ক্যালকুলেট করতে পারি, সেটি কীভাবে ক্যালকুলেট করছে তার ডেফিনিশন না জেনেও।
ফাংশন ডিক্লেরেশন এবং ডেফিনিশন
ফাংশন ডিক্লেরেশন হল কম্পাইলারকে ফাংশনের রিটার্ন টাইপ এবং নাম বলা প্রক্রিয়া।
সিনট্যাক্স
বডি ছাড়া
Return_type function_name(parameter list which is optional);
বডি সহ
Return_type function_name(parameter list which is optional) { //body of the function }
ব্যাখ্যা
return_type − এটি কম্পাইলারকে বলে দেয় ফাংশন কি কিছু রিটার্ন করবে কিনা এবং যদি কোনো ডেটা রিটার্ন করে তবে সেটি কী টাইপের ডেটা হবে।
void dummy(){
//যেহেতু ফাংশনের রিটার্ন টাইপ void তাই এটি কলারের কাছে কিছু রিটার্ন করবে না এবং তাই এতে রিটার্ন স্টেটমেন্ট থাকবে না।
}
Int dummy(){
//যেহেতু ফাংশনের রিটার্ন টাইপ int তাই এটি কলারের কাছে ইন্টিজার ভ্যালু রিটার্ন করবে এবং এটি ম্যান্ডেটরি যে এতে রিটার্ন স্টেটমেন্ট থাকবে কারণ এটি ইন্টিজার ভ্যালু রিটার্ন করছে।
return integer_value;
}
float dummy(){
//যেহেতু ফাংশনের রিটার্ন টাইপ float তাই এটি কলারের কাছে ফ্লোটিং ভ্যালু রিটার্ন করবে এবং এটি ম্যান্ডেটরি যে এতে রিটার্ন স্টেটমেন্ট থাকবে কারণ এটি ফ্লোটিং ভ্যালু রিটার্ন করছে।
return float_value;
}
function name − ফাংশন নাম প্রোগ্রামার যেকোনো নাম দিতে পারেন। উপরের উদাহরণে, আমরা ফাংশনটির নাম dummy দিয়েছি।
parameters list(optional) − যেকোনো lúc ফাংশন কলারের পাস করা ভ্যালুগুলোর ওপর অপারেশন করবে, তখন আমাদের প্যারামিটার তৈরি করতে হবে।
ফাংশন ডেফিনিশন ফাংশনের ফাংশনালিটি ধারণ করে যা সেটি কল হওয়া পর্যন্ত করবে।
উদাহরণ
#include<iostream>
using namespace std;
// দুটি প্যারামিটারের মধ্যে সর্বোচ্চ মান ক্যালকুলেট করার ফাংশন
int greatest(int val_1, int val_2) // ফাংশনের রিটার্ন টাইপ ইন্টিজার
{
// ফাংশনের বডি (ডেফিনিশন)
if(val_1>val_2){
return val_1;
}
else{
return val_2;
}
}
int main(){
int val_1=10, val_2=20;
// ফাংশন কল করুন এবং ফাংশন দ্বারা রিটার্ন করা ইন্টিজার ভ্যালু ইন্টিজার ভেরিয়েবলে স্টোর করুন
int highest = greatest(val_1,val_2);
// সর্বোচ্চ মান প্রিন্ট করুন
cout<<"The greatest value is : "<<highest;
// main-এর রিটার্ন টাইপ int হওয়ায়, কম্পাইলারের জন্য এতে রিটার্ন স্টেটমেন্ট থাকতে হবে
return 0;
}
আউটপুট
উপরের কোডের আউটপুট হবে −
The greatest value is : 20
ফাংশন প্যারামিটার
প্যারামিটার অপশনাল, যদি কোনো প্যারামিটার না থাকে তবে ফাংশন তার ফাংশনালিটি পারফর্ম করবে
ফাংশন ডেফিনিশনে ডিক্লেয়ার্ড ভেরিয়েবলগুলো যা কলারের পাস করা ভ্যালুগুলো ক্যাচ করে সেগুলোকে প্যারামিটার বলা হয়। int greatest(int val_1, int val_2)
int greatest(int val_1, int val_2)

কলারের পাস করা ভেরিয়েবলগুলোকে আর্গুমেন্ট বলা হয়।
int highest = greatest(val_1,val_2);

আকচুয়াল প্যারামিটার vs ফরম্যাল প্যারামিটার-
আকচুয়াল প্যারামিটার হল ফাংশনে পাস করা ডেটা যেমন উপরের উদাহরণে, 10 এবং 20 হল আকচুয়াল প্যারামিটার
ফরম্যাল প্যারামিটার হল ফাংশন দ্বারা রিসিভ করা ডেটা যেমন উপরের উদাহরণে, val_1 এবং val_2 হল ফরম্যাল প্যারামিটার।
main() ফাংশন সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট
প্রতিটি প্রোগ্রামের একটি এন্ট্রি পয়েন্ট থাকে যেখানে থেকে এক্সিকিউশন শুরু হয়, যেমন C এবং C++-তে main() ফাংশন রয়েছে।
যদি main() ফাংশনের রিটার্ন টাইপ void হয় তবে মানে সেটি কম্পাইলারের কাছে কিছু রিটার্ন করছে না, আর যদি main() ফাংশনের রিটার্ন টাইপ int হয় তবে সেটি কম্পাইলারের কাছে ভ্যালু রিটার্ন করছে। যেমন, main()-এ "return 0" থাকলে সেটি প্রোগ্রামের টার্মিনেশন বোঝায়।
C-তে − main() ফাংশনের রিটার্ন টাইপ void এবং int মাত্র হতে পারে কারণ main() ফাংশন বা ইন্টিজার ভ্যালু রিটার্ন করতে পারে কম্পাইলারের কাছে বা কিছুই রিটার্ন না করতে পারে।
C++-তে − main() ফাংশনের রিটার্ন টাইপ int মাত্র হতে পারে কারণ main() ফাংশন কম্পাইলারের কাছে ইন্টিজার ভ্যালু রিটার্ন করে।