ফাংশন (Functions)
ফাংশন কী? (What Are Functions?)
একটি ফাংশন অনেকটা রেসিপি কার্ডের (recipe card) মতো। আপনি একবার এর জন্য নির্দেশ বা ইন্সট্রাকশন লিখে সেটির একটি নাম দিয়ে দিলেন, এরপর চাইলে যেকোনো সময় সেই নাম ধরে ডেকে রেসিপিটি অনুযায়ী "রান্না" করতে পারেন। আপনি চাইলে এর মাঝে উপকরণও (যা প্যারামিটার (parameters) নামে পরিচিত) পাঠাতে পারেন, যা বিনিময়ে আপনাকে একটি তৈরি খাবার (বা রিটার্ন ভ্যালু (return value)) ফেরত দেবে।
ফাংশনগুলোই হলো জাভাস্ক্রিপ্টের মেরুদণ্ড। এগুলো আপনাকে সাহায্য করে:
- বারবার একই জিনিস লেখা বা রিপিটেশন (repetition) এড়াতে — একবার লিখুন, যেখানে খুশি ব্যবহার করুন
- কোডগুলোকে গোছাতে — বড় কোনো সমস্যাকে ছোট ছোট নাম দেওয়া অংশে ভাগ করে নিতে
- অ্যাবস্ট্রাকশন (abstractions) তৈরি করতে — একটি ছোট ও পরিষ্কার নামের আড়ালে পেছনের হাবিজাবি কোডগুলোকে লুকিয়ে রাখতে
জাভাস্ক্রিপ্টে মূলত তিনটি উপায়ে ফাংশন তৈরি করা যায়: ডিক্লেয়ারেশন (declarations), এক্সপ্রেশন (expressions), এবং অ্যারো ফাংশন (arrow functions)।
ফাংশন তৈরি করার তিনটি উপায় (Three Ways to Create Functions)
প্যারামিটার — ডিফল্ট ভ্যালু এবং রেস্ট (Parameters — Default Values & Rest)
আপনি যদি কোনো ভ্যালু প্রদান করা ভুলে যান, তবে ডিফল্ট প্যারামিটার (Default parameters) আপনাকে একটি বিকল্প ভ্যালু (fallback value) ঠিক করে দেওয়ার সুযোগ দেয়। এটিকে একটি দাওয়াত বা মেজবানের সাথে তুলনা করতে পারেন, যেখানে আপনি নির্দিষ্ট করে কিছু না বললেও তারা নিজে থেকে আপনার জন্য পানি বা লবণ দিয়ে যায়।
রেস্ট প্যারামিটার (Rest parameters) (...args) যেকোনো সংখ্যক আর্গুমেন্ট সংগ্রহ করে একটিমাত্র অ্যারেতে জমা করে রাখে। যখন আপনি আগে থেকে জানেন না যে কতগুলো ইনপুট আসবে বা পাওয়া যাবে, তখন এটি বেশ দারুণ কাজে দেয়।
ডিফল্ট এবং রেস্ট প্যারামিটার (Default & Rest Parameters)
ফাংশনগুলোও এক ধরনের ভ্যালু — এগুলোকে যেকোনো জায়গায় পাস করা যায় (Functions Are Values — Passing Them Around)
জাভাস্ক্রিপ্টের ক্ষেত্রে ফাংশনগুলো হলো ফার্স্ট-ক্লাস ভ্যালু বা প্রথম শ্রেণীর নাগরিক (first-class values)। অর্থাৎ আপনি চাইলে সেগুলোকে ভ্যারিয়েবলে সংরক্ষণ করতে পারেন, অন্যান্য ফাংশনের আর্গুমেন্ট হিসেবে পাস করতে পারেন এবং কোনো ফাংশন থেকে ফাংশনকে রিটার্নও করতে পারেন। এই সুবিধাটিই জাভাস্ক্রিপ্টকে এত বেশি ফ্লেক্সিবল (flexible) বা সাবলীল করে তুলেছে।
যেসব ফাংশন অন্য কোনো ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে (অথবা ফাংশন রিটার্ন করে), সেগুলোকে হাইয়ার-অর্ডার ফাংশন (higher-order function) বলা হয়। এগুলো আপনি প্রায় সব জায়গাতেই দেখতে পাবেন — যেমন setTimeout, addEventListener, এবং .map() বা .filter() এর মতো অ্যারে মেথডসমূহ।