প্রোগ্রামিং এ ফাংশান – উদাহরন হিসেবে সি প্রোগ্রামিং ল্যাঙ্গুয়েজ

আপনি একজন বিখ্যাত ম্যাজিশিনা। ম্যাজিশিয়ান না হলেও ভবিশ্যতে হবেন কারন আপনি একজন প্রোগ্রামার। প্রোগ্রামাররা অনেক কিছুই করতে হয়, তারা ম্যাজিক ও জানতে হয়। প্রোগ্রামারদের ম্যাজিক কি জানেন?

ওহ!! আমি এখনো বলিই নি, জানবেন কিভাবে। প্রোগ্রামারদের ম্যাজিক হচ্ছে ফাংশান। এখন আবার আপনার মনে হতে পারে এটা আবার কি? তাই না। মনে করেন আপনি একটা ম্যাজিক শোতে গিয়েছেন। আপনি এখন একটা ম্যাজিক দেখাবেন যেখানে একটা ছেড়া সুতোকে ফু দিলে তা জোড়ালেগে যাবে। এমনই তো দেখেন তাই না? এই ফু টাই হচ্ছে ফাংশান।

তাহলে আমরা এটা কিভাবে লিখব প্রোগ্রামে তা দেখিঃ

সম্পুর্ন সুতো= ফু(ছেড়া সুতো);

অর্থাৎ যাকে ফু দিবেন তা ব্র্যাকেটে লিখতে হয় তাহলে ফু দেওয়ার ফলে কি হয় তা পাওয়া যায়।

এখন ফু শুধু মাত্র ছেড়া সুতো উপর কাজ করে। এখন যদি আপনি ছেড়া সুতোর পরিবর্তে অন্য কিছু যেমন একটা কাগজকে ফু দেন তা কিন্তু টাকাতে পরিনত হবে না। তার জন্য কিছু মন্ত্র পড়তে হবে। এখানে মন্ত্রটা হচ্ছে ফাংশান।

টাকা = ফু(কাগজ);

কাগজের উপর ফু দিলে তা টাকাতে পরিনত হচ্ছে তাই না?
ফাংশানটা ও একই রকম। এই ফু বা মন্ত্র এর মত। এখন আপনাকে বুঝতে হয় কোথায় কি ব্যবহার করতে হবে। অনেক হাবি জাবি বকা হয়ে গেছে এখন দেখি কিভাবে তা আমরা কাজে লাগাবো।

আমরা দুটি সংখা যোগ করতে চাই।

তার জন্য আমাদের যোগ নামে একটা ফাংশান লাগবে।

যোগফল = যোগ(সংখ্যা১, সংখ্যা২);

এখন আপনি হয়তো আমাকে দেখে হাসতে পারেন এত ভেজাল করার কি দরকার। আমি তো এমনিতেই দুটি সংখ্যার মাজে + চিহ্ন দিয়ে যোগ ফল পেতে পারি, মাঝখানে ফাংশান নামক এ বস্তুটা নিয়ে আসার কি দরকার?
আচ্ছা, এটা আমাদের বার বার যোগ করা থেকে বাঁচিয়ে দিব। শুধু মাত্র যোগ ফাংশানটাকে ডাকলেই আমাদের কাজ করে দিব।

আচ্ছা, ফাংশান কি তা আগে জানি। ফাংশান হচ্ছে পুনরায় ব্যবহার যোগ্য কোড ব্লক। যা একটি নির্দিষ্ট কাজ করতে পারে। ফাংশান ভালো ভাবে জানলেই প্রোগ্রামিং এর একটা বিশাল অংশ শেখা শেষ হয়ে যায়। তা জানলেই নিজের ইচ্ছে মত কোড লেখা যায়। সকল প্রোগ্রামিং ল্যাঙ্গুয়েজ এ ফাংশান লেখার ধরন প্রায় একই।  আমি সি প্রোগ্রামিং দিয়ে উদাহরন দিচ্ছি। 
একটা ফাংশান নিচের মত করে লেখা হয়ঃ


Function_Data_Type Function_Name (Parameters){

....
return value;

}

  • Function_Data_Type হচ্ছে ফাংশানটি কি ধরনের ডেটা রিটার্ন করবে তা। যেমন int, char, float, double ইত্যাদি।
  • ফাংশানের তো একটা নাম থাকতে হবে তাই না? যে নাম দিয়ে ফাংশানটিকে ডাকতে হবে।  Function_Name হচ্ছে ফাংশানের নাম।
  • Parameters হচ্ছে ফাংশান দিয়ে কি কি ডেটা পাস করবে।  এখানে এক বা একাদিক Parameter পাস করা যেতে পারে। কোন কোন ফাংশানে কোন Parameter নাও থাকতে পারে।  এটা নির্ভর করে কি ধরনের ফাংশান লিখা হচ্ছে তার উপর। একের অধিক Parameter থাকলে তাদেরকে কমা দিয়ে লিখতে হয়।
  • কাজ শেষে ফাংশানটি কি রিটার্ন করবে তাই return দিয়ে  পাস করা হয়।

নিচের ছবিটি দেখি। এখানে যোগ করার একটি ফাংশান এবং এর ভিবিন্ন অংশ দেখানো হয়েছেঃ

function add

আমরা ছোট্ট একটা প্রোগ্রাম লিখে ফেলিঃ

#include <stdio.h>
int add(int a, int b){

int sum = a+b;
return sum;
}
int main()
{
int x, y , result;
scanf("%d", &x);
scanf("%d", &y);
result = add(x,y);
printf("Result is: %d", result);
 return 0;
}

#include <stdio.h> এর পরই আমরা ফাংশানটি লিখছি। main ফাংশান এর আগে। ফাংশানটি কল কছি add(x,y) দিয়ে। যার মধ্যে দুটি প্যারামিটার পাস করেছি। একটা x আরেকটা y, যে গুলো আমরা scanf ফাংশান দিয়ে ইনপুট হিসেবে নিয়েছি। এর ফলে আমাদের প্রোগ্রামটি main থেকে বের হয়ে add ফাংশানের ভেতরে যাবে। গিয়ে কিছু কাজ কমপ্লিট করবে। এবং ফাংশানের ভেতরের কাজ সম্পুর্ন হলে আবার main এ ফিরে আসবে।
এখন ফাংশানে কি করছে জানেন? int a, int b নামক যে ভ্যারিয়েবল লিখছি ফাংশানের argument এ, প্রথম প্যারামিটার মানে x assign হবে a তে। এবং দ্বিতীয়টা মানে y assign হবে b তে। তারপর ফাংশানটি sum নামক ইন্টিজার ভ্যারিয়েবলে a+b এর মান রাখবে। return sum দিয়ে ঐ sum টা রিটার্ন করবে। এবং আমাদের main প্রোগ্রামে ফিরে আসবে। আবার ফাংশানে রিটার্ন করা ভ্যালুটা result নামক ভ্যারিয়েবলে এসাইন করবে।
ছোট্ট একটা যোগের জন্য আসলেই আমরা অনেক বেজাল করে ফেলছি। তবে এখন আমরা ফাংশান কি তা জানি, কিভাবে কাজ করে তাও জানি।

এবার আরো সহজ একটা ফাংশান লিখি।


#include <stdio.h>
void callme(){
printf("You call me form Main \n");
}
int main()
{
callme();
return 0;
}

&nbsp;

এখানে আমরা callme নামক একটা ফাংশান লিখছি, যা কিছুই রিটার্ন করবে না। এ জন্য ফাংশানের Data Type লিখছি void। আচ্ছা, main থেকে যখন আমরা ফাংশানটিকে কল করছি  callme(); দিয়ে তখন ফাংশানের ভেতর গিয়ে দেখে You call me form Main লেখাটি প্রিন্ট করতে। প্রোগ্রামটি তাই করল। এবং callme ফাংশান থেকে বের হয়ে আবার main এ আসল। তারপর দেখল আর কোন কাজ নেই। তাই কি করল? প্রোগ্রামটি শেষ করল।

আমরা আরেকটু কঠিন একটা ফাংশান লিখে ফেলতে পারি না?

আমি কঠিন বলছি তাই বলে মোটেও কঠিন হবে না। এবার আমরা দুটি সংখ্যার মধে বড় সংখ্যাটা বের করার ফাংশান লিখব। তখন কি হবে জানেন? আচ্ছা আগে কোডটি লিখে ফেলিঃ


#include <stdio.h>
int max(int a, int b){

int maximum = (a>=b) ? a : b ;
return maximum;
}
int main()
{
int x, y , result;
scanf("%d", &x);
scanf("%d", &y);
result = max(x,y);
printf("max is: %d", result);
 return 0;
}

এখানে আমরা max নামে একটা ফাংশান লিখছি। বাকি অংশন আগের মতই। ফাংশানের ভেতর Conditional Operator (?:) ব্যবহার করছি। Conditional Operator সম্পর্কে জানতে লিঙ্কে ক্লিক করে লেখাটি পড়ুন।  আগে বার আমরা দুটি সংখ্যা যোগ করছি ফাংশানের ভেতর। এবার দুটি সংখ্যার মধে বড় সংখ্যাটা ফাংশান রিটার্ন করছে। এবং পরে তা আমরা প্রিন্ট করছি।

আচ্ছা, ফাংশান লিখলেই যে রিটার্ন করতে হবে এমন না। ফাংশান কোন কিছু রিটার্ন নাও করতে পারেন। সে ধরনের ফাংশানের Function_Data_Type লিখতে হয় void. আরেকটা ছোট্ট প্রোগ্রাম লিখে ফেলি, কি বলেন?


#include <stdio.h>

void max(int a, int b){
int maximum = (a>=b) ? a : b ;
printf("max is: %d", maximum);
}

int main()
{
int x, y;
scanf("%d", &x);
scanf("%d", &y);
max(x,y);
return 0;
}

এখানে কি করছি জানেন, আমরা ফাংশানটিকে কল করছি। ফাংশানের ভেতরই বড় ছোট নির্নয় করেছি। ফাংশানের ভেতরই প্রিন্ট করছি। তারপর ফাংশান থেকে বের হয়ে গেছি। মেইন প্রোগ্রামে এসে দেখি আর কোন কাজ বাকি নেই। তাই পোগ্রামটি শেষ হয়েছে।

Factorial কি তা তো আমরা জানি, তাই না? একটি পূর্ণসংখ্যা ও শূন্য থেকে বড় ও সংখ্যাটি থেকে ছোট সকল পূর্ণসংখ্যার গুনফল হচ্ছে ফ্যাক্টোরিয়াল। n পূর্ণসংখ্যা হয়, তাহলে n এর ফ্যাক্টোরিয়াল প্রকাশ করা হয় এভাবেঃ n! যেমন 5! এর মান হবে 120

five factorial

একটা পূর্ণসংখ্যার Factorial বের করার একটি প্রোগ্রাম লিখিঃ

</pre>
#include <stdio.h>

long int factorial(int n){
int i;
long int result =1;
if(n>1){
for(i=2; i<=n; i++)
result = result*i;
}
return result ;
}

int main()
{
int a;
scanf("%d", &a);
printf("Factorial of n is : %d", factorial(a));
return 0;
}
<pre>

এখানে আমরা একটি ফাংশান লিখছি যা ফ্যাক্টোরিয়াল বের করতে পারে। প্যারামিটার হিসেবে আমাদের রয়েছে একটি argument. প্রোগ্রামটি রান করে এর পর http://en.wikipedia.org/wiki/Factorial এখানে গিয়ে ভিবিন্ন সংখ্যার ফ্যাক্টোরিয়াল এর সাথে মিলিয়ে দেখুন আমাদের প্রোগ্রাম কাজ করে কিনা ঠিক মত।
বড় সংখ্যার জন্য প্রোগ্রামটি ঠিক মত কাজ করবে না। কেন করবে না? বের করার দ্বায়িত্ব আপনার 🙂

আচ্ছা, আমরা এতক্ষন যে ফাংশান গুলো লিখছি তা main এর আগে লিখছি। আমরা ইচ্ছে করলে main এর পরেও লিখতে পারি। তবে তার জন্য main ফাংশান এর আগে তাকে ডিক্লেয়ার করতে হবে। যাকে বলে Function Prototype.


#include <stdio.h>

void checkprime(int num);

int main()
{
int a;
scanf("%d", &a);
checkprime(a);
return 0;
}

void checkprime(int num){
 int i,count=0;
 for(i=2;i<=num/2;i++){
 if(num%i==0){
 count++;
 break;
 }
 }
 if(count==0 && num!= 1)
 printf("%d is a prime number",num);
 else
 printf("%d is not a prime number",num);
}

এখানে আমরা প্রাইম নাম্বার চেক করার একটা প্রোগ্রাম লিখছি। এর মধ্যে আমরা  checkprime নামক একটা ফাংশান লিখছি যা আমরা main এর পর লিখছি। checkprime নামক যে একটা ফাংশান রয়েছে আমাদের প্রোগ্রামের main এর পর তা আমাদের আগে জানিয়ে দিতে হবে। সে জন্যই Function Prototype. এ জন্য মেইন এর আগে আমাদের ফাংশান প্রোটোটাইপ লিখতে হয়। যেমন আমাদের ফাংশানের প্রোটোটাইপ হচ্ছেঃ void checkprime(int num);

অর্থাৎ Function Prototype লিখতে হবে এমনঃ

Function_Data_Type Function_Name (Parameters);

যদিও অনেক কম্পাইলারে Function Prototype লিখতে হয় না।

এই হলো ফাংশান। অনেক সহজ জিনিস, তাই না? আগেই ও বলছি একবার আবার বলি। প্রোগ্রামিং শেখার জন্য অল্প কয়েকটি জিনিস বুঝলেই হয়। ভ্যারিয়েবল, লুপ, ফাংশান আর এরে। এগুলো দিয়েই যে কোন প্রোগ্রাম লিখে ফেলা যায়। দরকার একটু প্র্যাকটিস। আশা করি তা নিয়মিত করবেন।

সবার জন্য শুভ কামনা। শুভ প্রোগ্রামিং।

Level 0

আমি জাকির হোসাইন। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 224 টি টিউন ও 1487 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 5 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

পৃথিবীতে অল্পকয়েক দিনের জন্য অনেকেই আসে, হেঁটে খেলে চলে যায়। এর মধ্যে অল্প কয়েক জনই পায়ের চাপ রেখে যায়।ওদের একজন হতে ইচ্ছে করে। প্রযুক্তির আরেকটি সেরা ব্লগ টেকটুইটস। আপনাদের স্বাগতম, যেখানে প্রতিটি বন্ধুর অংশ গ্রহনে গড়ে উঠেছে একটি পরিবার। আপনাদের পছন্দ হবে আশা করি। ফেসবুকে আমি - ?জাকির!


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

?জাকির ভাই! সোজা কথায় সেইরাম…! 😀 অনেক আগে সি শেখা শুরু করেও ছেড়ে দিছিলাম, এখন আপনার পোস্ট পড়ে আবার নেশা লাগছে :mrgreen:

দারুন লিখছেন ভাই! ফাস্ট পার্ট পড়ে আমি আমার পিএইচপি এর ফাংশন বুঝে গেছি 😀 আমার জন্য সুবিধাই হইলো 😉

Level 0

অসাধারণ হয়েছে। আরো লিখবেন আশা রাখছি।

ধন্যবাদ ভাই। অনেক helpful.