ফাংশনের সাধারণ ধারণা
JavaScript Function হলো এমন একটি কোড ব্লক যা নির্দিষ্ট কাজ সম্পাদনের জন্য ব্যবহার করা হয়। সহজভাবে বললে, ফাংশন হচ্ছে কোডের একটি অংশ যেটা আমরা বারবার ব্যবহার করতে পারি। যখনই আমরা একটি নির্দিষ্ট টাস্ক বারবার লিখতে চাই না, তখন আমরা সেই টাস্ককে একটি ফাংশনের ভেতর লিখে রাখি এবং প্রয়োজনমতো কল করি।
প্রোগ্রামিং-এ Function কে অনেকটা “মেশিন” হিসেবে ধরা যায় — ইনপুট নিলে প্রসেস করে আউটপুট দেয়। JavaScript Function ইনপুট (Arguments) নেয়, ভেতরের কোড চালায় এবং একটি রেজাল্ট (Return Value) দেয়।
কেন দরকার? ধরুন আপনাকে ওয়েবসাইটে ব্যবহারকারীর নাম বারবার প্রিন্ট করতে হবে। বারবার একই কোড লিখলে কোড বিশৃঙ্খল হয়ে যাবে। কিন্তু একটি ফাংশন বানিয়ে একবারে সেই কাজ করা যায় — পুনঃব্যবহারযোগ্যতা ও কোড সরলকরণ হয়।
JavaScript Function এর মূল ধারণা — উদাহরণ
নিচে একটি সরল উদাহরণ আছে যেখানে greet
নামের ফাংশন তৈরি করা হয়েছে এবং সেটাকে বিভিন্ন নাম দিয়ে কল করা হয়েছে।
function greet(name) {
return "Hello, " + name;
}
console.log(greet("Rahim"));
console.log(greet("Karim"));
এই উদাহরণে greet()
একবার লিখে বারবার ব্যবহার করা হয়েছে — এটাই ফাংশনের মূল সুবিধা।
JavaScript Function এর মূল কাঠামো
JavaScript এ ফাংশন লেখার কয়েকটি জনপ্রিয় পদ্ধতি আছে। প্রতিটির উপর সংক্ষিপ্ত আলোচনা নিচে দেয়া হলো — প্রতিটি পদ্ধতির আলাদা বৈশিষ্ট্য এবং ব্যবহারিক সুবিধা রয়েছে।
Function Declaration
এই পদ্ধতি সবচেয়ে সাধারণ এবং সহজে বোঝার মতো। সাধারণত ফাংশনকে একটি নাম দিয়ে সরাসরি ঘোষণা করা হয়:
function add(a, b) {
return a + b;
}
console.log(add(5, 10));
এখানে function
কীওয়ার্ড, ফাংশনের নাম add
, এবং দুটি প্যারামিটার আছে — ফাংশনটি দুটো সংখ্যার যোগফল ফিরিয়ে দেয়।
Function Expression
এখানে আমরা ফাংশনকে একটি ভ্যারিয়েবলের মধ্যে স্টোর করি। অনান্য কোডের মতো এটাও খুবই ব্যবহারযোগ্য, বিশেষ করে যখন আপনি anonymous (নামহীন) ফাংশন প্রয়োজন করেন বা higher-order programming করবেন।
const multiply = function(a, b) {
return a * b;
};
console.log(multiply(4, 5));
উপরের উদাহরণে ফাংশনের নাম নেই — তা multiply
ভ্যারিয়েবলের মাধ্যমে ব্যবহার করা হয়েছে।
Arrow Function (ES6)
ES6-এর পরে Arrow function এসেছে — এটি সংক্ষিপ্ত সিনট্যাক্স এবং লেক্সিকাল this
প্রদান করে। ছোট ফাংশনের জন্য খুব উপযোগী:
const divide = (a, b) => a / b;
console.log(divide(10, 2));
Arrow function সাধারণত ছোট এবং এক-লাইন রিটার্নের জন্য ব্যবহার করা হয়, তবে বড় লজিক হলে ব্লক দিয়ে লিখতেও পারেন।
Related Posts
Parameters এবং Arguments
Function–এর ইনপুট বোঝানোর জন্য দুটি শব্দ প্রচলিত: parameter এবং argument। এগুলো প্রায়ই একসাথে আসে কিন্তু ভিন্ন জিনিস নির্দেশ করে।
Parameters কি?
Parameters হলো ফাংশন ডিক্লারেশনের ভেতরে নির্ধারিত ভেরিয়েবল, যা ফাংশনের ভিতরের জন্য ইনপুট হিসেবে কাজ করে।
function greet(name) {
return "Hello " + name;
}
এখানে name
একটি parameter।
Arguments কি?
Arguments হলো ফাংশন কল করার সময় প্রদত্ত আসল মানগুলো। উদাহরণস্বরূপ, greet("Hasan")
কলে "Hasan"
হচ্ছে argument।
Default Parameters
যদি কল করা হয় কিন্তু নির্দিষ্ট প্যারামিটার না দেয়া হয়, আপনি ডিফল্ট মান নির্ধারণ করে রাখতে পারেন:
function greet(name = "Guest") {
return "Hello " + name;
}
console.log(greet()); // "Hello Guest"
Function এর Return Statement
return কিবোর্ডটি একটি ফাংশনের সবচেয়ে গুরুত্বপূর্ণ অংশগুলোর একটি — এটি ফাংশন থেকে আউটপুট পাঠায়। যদি ফাংশনে return
না থাকে, ফাংশন undefined
রিটার্ন করতে পারে (নথিভুক্ত না করলে)।
Return কি কাজ করে?
`return` ভ্যালুটি কলার কোডে ফিরিয়ে দেয়, যাতে সেই ভ্যালু পরে ব্যবহার করা যায়।
function sum(a, b) {
return a + b;
}
let result = sum(10, 20);
console.log(result); // 30
Multiple Return Value কি সম্ভব?
একবারে কেবল একটি মান সরাসরি রিটার্ন করা যায়, কিন্তু আপনি array
বা object
রিটার্ন করে বহু তথ্য একসাথে পাঠাতে পারেন:
function userInfo() {
return { name: "Rahim", age: 25 };
}
console.log(userInfo());
Function এর ধরন (Types of Functions)
JavaScript-এ নানা ধরনের ফাংশন আছে — ব্রাউজারের বিল্ট-ইন ফাংশন থেকে শুরু করে ডেভেলপার বানানো কাস্টম ফাংশন ও higher-order ফাংশন। নিচে সাধারণ ধরণের সংক্ষিপ্ত তালিকা দেয়া হলো।
Built-in Functions
ব্রাউজার/JS এ আগে থেকেই থাকা ফাংশনগুলো। যেমন: alert()
, prompt()
, parseInt()
ইত্যাদি। এগুলো সিস্টেম-লেভেলে নির্দিষ্ট কাজ করে থাকে।
User-defined Functions
আপনি নিজে যেই ফাংশনগুলো বানান — তা user-defined। উদাহরণ:
function hello() {
return "Hello World";
}
Anonymous Functions
নামের ছাড়া ফাংশন — সাধারণত callback বা inline ব্যবহারের জন্য।
setTimeout(function() {
console.log("This is anonymous function");
}, 1000);
Callback Functions
একটি ফাংশনকে আরেকটি ফাংশনের আর্গুমেন্ট হিসেবে পাঠানো — সেটাই callback। এই প্যাটার্ন asynchronous অথবা event-driven কোডে খুবই জরুরি।
function processUserInput(callback) {
let name = "Rahim";
callback(name);
}
processUserInput(function(name) {
console.log("Hello " + name);
});
Scope এবং Function
JavaScript এ scope হলো ভ্যারিয়েবল বা ফাংশনের অ্যাক্সেসিবিলিটি। কোন ভ্যারিয়েবল কোথায় ব্যবহার করা যাবে সেটা scope দ্বারা নির্ধারিত হয়। সঠিকভাবে scope না বুঝলে ভ্যারিয়েবল undefined হয়ে যাবে বা ভুল জায়গায় অ্যাক্সেস করা যাবে।
Local Scope
যে ভ্যারিয়েবলগুলো ফাংশনের ভিতরে ডিক্লেয়ার করা হয়, সেগুলো কেবল ওই ফাংশনের ভিতরে ব্যবহার করা যায়। একে local scope বলা হয়।
function localExample() {
let msg = "I am local!";
console.log(msg);
}
localExample();
// console.log(msg); // Error: msg is not defined
Global Scope
যদি কোন ভ্যারিয়েবল ফাংশনের বাইরে ডিক্লেয়ার করা হয়, তবে সেটি যেকোনো জায়গা থেকে অ্যাক্সেস করা যায়। একে global scope বলে।
let msg = "I am global!";
function showMsg() {
console.log(msg);
}
showMsg(); // "I am global!"
Block Scope
let
এবং const
দিয়ে ডিক্লেয়ার করা ভ্যারিয়েবল block scoped হয়। মানে শুধু সেই ব্লকের ভিতরে ব্যবহার করা যায়।
{
let blockVar = "Inside block";
console.log(blockVar); // কাজ করবে
}
// console.log(blockVar); // Error
Hoisting এবং Function
JavaScript এ কোড চালানোর আগে ভ্যারিয়েবল এবং ফাংশনগুলোকে উপরে (top) তুলে নেয়া হয়, এটাকে বলে hoisting।
Function Declaration Hoisting
Function declaration আগে থেকে কোথাও কল করলেও কাজ করবে কারণ এটি hoisted হয়।
sayHello();
function sayHello() {
console.log("Hello!");
}
Function Expression Hoisting
Function expression hoisted হয় না। তাই আগে থেকে কল করলে error হবে।
sayHi(); // Error
const sayHi = function() {
console.log("Hi!");
};
Nested Functions
একটি ফাংশনের ভেতরে আরেকটি ফাংশন রাখা যায়, একে nested function বলে।
Inner Functions
Nested function গুলো সাধারণত parent function এর ভেতরে কাজ করে এবং parent এর ভ্যারিয়েবলগুলো অ্যাক্সেস করতে পারে।
function outer() {
let outerVar = "Outer Variable";
function inner() {
console.log(outerVar);
}
inner();
}
outer();
Closure এর সাথে সম্পর্ক
Nested function ব্যবহার করার সময় closure তৈরি হয়। এর মানে হলো inner function parent function এর variable মনে রাখতে পারে।
function makeCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2
Function vs Method
Function এবং Method দেখতে একরকম হলেও পার্থক্য রয়েছে।
Function কি?
Function হলো স্বাধীন কোড ব্লক, যা আলাদাভাবে ডিফাইন করা হয়।
Method কি?
যদি function কোনো object এর property হিসেবে থাকে, তখন তাকে method বলে।
const person = {
name: "Rahim",
greet: function() {
return "Hello " + this.name;
}
};
console.log(person.greet());
পার্থক্য কোথায়?
- Function একা একাই ডিফাইন করা হয়।
- Method object এর অংশ হিসেবে ডিফাইন করা হয়।
- Method সাধারণত object এর data নিয়ে কাজ করে।
Recursion in JavaScript
Recursion হলো এমন একটি টেকনিক যেখানে function নিজেকেই কল করে। এটি অনেক সময় জটিল সমস্যার সরল সমাধান দেয়।
Recursion কি?
যখন একটি function নিজেকে বারবার কল করে, তখন তাকে recursive function বলে। তবে recursion এ অবশ্যই একটি base condition থাকতে হয়, নাহলে infinite loop হয়ে যাবে।
Practical Example
নিচে factorial বের করার একটি recursion উদাহরণ দেয়া হলো:
function factorial(n) {
if (n === 0) {
return 1;
}
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120
Higher-Order Functions
JavaScript এ Higher-Order Function হলো এমন ফাংশন যা অন্য ফাংশনকে argument হিসেবে নিতে পারে বা return করতে পারে। এগুলো functional programming এর একটি গুরুত্বপূর্ণ ধারণা।
Definition
একটি higher-order function এমন function যা:
- আরেকটি function কে parameter হিসেবে নেয়।
- অথবা আরেকটি function return করে।
Map, Filter, Reduce উদাহরণ
JavaScript এ array method গুলোর মধ্যে map()
, filter()
, এবং reduce()
হলো সবচেয়ে প্রচলিত higher-order functions।
const numbers = [1, 2, 3, 4, 5];
// map: প্রতিটি সংখ্যা দ্বিগুণ করা
const doubled = numbers.map(num => num * 2);
// filter: শুধু জোড় সংখ্যা রাখা
const evens = numbers.filter(num => num % 2 === 0);
// reduce: সব সংখ্যার যোগফল বের করা
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(doubled); // [2, 4, 6, 8, 10]
console.log(evens); // [2, 4]
console.log(sum); // 15
Asynchronous Functions
JavaScript একটি single-threaded ভাষা, তবে asynchronous ফিচার থাকার কারণে এটি non-blocking কাজ করতে পারে। asynchronous function ব্যবহার করে আমরা API call, Timer ইত্যাদি হ্যান্ডেল করি।
setTimeout এবং setInterval
setTimeout()
নির্দিষ্ট সময় পর একটি কোড চালায়। আর setInterval()
বারবার নির্দিষ্ট সময় অন্তর চালায়।
setTimeout(() => {
console.log("2 সেকেন্ড পরে দেখা গেল!");
}, 2000);
setInterval(() => {
console.log("প্রতি 3 সেকেন্ড পর চলবে।");
}, 3000);
Async এবং Await
ES8 এ আসা async/await হলো promise হ্যান্ডেল করার সহজ পদ্ধতি।
async function fetchData() {
let response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
let data = await response.json();
console.log(data);
}
fetchData();
Function এর ব্যবহারিক দিক
Function শুধু থিওরিটিকাল ধারণা নয়, বরং কোডকে কার্যকরী, পরিষ্কার ও পুনঃব্যবহারযোগ্য করতে বিশাল ভূমিকা রাখে।
DRY Principle
DRY (Don't Repeat Yourself) প্রিন্সিপল মেনে function তৈরি করলে কোডের পুনরাবৃত্তি কমে যায়।
Code Reusability
একবার function বানালে সেটি যেকোনো সময় যেকোনো জায়গায় পুনরায় ব্যবহার করা যায়, ফলে development দ্রুত হয় এবং bug কমে।
Real-life Example of Functions
চলুন বাস্তব উদাহরণ দেখি যেখানে functions আমাদের কাজ সহজ করে তোলে।
Calculator Function
function calculator(a, b, operation) {
if (operation === "add") return a + b;
if (operation === "sub") return a - b;
if (operation === "mul") return a * b;
if (operation === "div") return a / b;
}
console.log(calculator(10, 5, "add")); // 15
Form Validation Function
function validateEmail(email) {
let pattern = /\S+@\S+\.\S+/;
return pattern.test(email);
}
console.log(validateEmail("test@example.com")); // true
উপসংহার
সারসংক্ষেপ
JavaScript function হলো ওয়েব ডেভেলপমেন্টের প্রাণ। এটি ছাড়া JavaScript প্রোগ্রামিং কল্পনা করাই যায় না। Function ব্যবহার করে আমরা কোড পুনঃব্যবহারযোগ্য, পরিষ্কার এবং কার্যকরী করতে পারি।
কেন Function শেখা জরুরি
আপনি যদি JavaScript বা অন্য কোনো প্রোগ্রামিং ভাষায় দক্ষ হতে চান, তাহলে function শেখা আবশ্যক। ছোট প্রজেক্ট থেকে শুরু করে বড় অ্যাপ্লিকেশন পর্যন্ত function ছাড়া কাজ সম্ভব নয়।
FAQs (প্রশ্নোত্তর)
- JavaScript Function কি? Function হলো কোডের একটি ব্লক যা নির্দিষ্ট কাজের জন্য তৈরি করা হয়।
- Function এবং Method এর মধ্যে পার্থক্য কী? Function একা থাকে, Method object এর property হিসেবে থাকে।
- Arrow Function কেন ব্যবহার করা হয়?
Arrow function কোডকে ছোট ও সহজ করে এবং লেক্সিকাল
this
হ্যান্ডেল করে। - Recursion কী? যখন একটি function নিজেকে কল করে তখন তাকে recursion বলে।
- Higher-Order Function কী? যে function অন্য function কে parameter হিসেবে নেয় বা return করে, সেটাই higher-order function।