JavaScript Function Expressions

জাভাস্ক্রিপ্ট কার্যকরী অভিব্যক্তি এবং তাদের অ্যাপ্লিকেশন

What is a Function Expression?

জাভাস্ক্রিপ্ট ফাংশনfunctionকীওয়ার্ড দিয়ে সংজ্ঞায়িত করা হয়

একটি জাভাস্ক্রিপ্ট ফাংশন একটি কার্যকরী অভিব্যক্তি হিসাবে সংজ্ঞায়িত করা যেতে পারে।

কার্যকরী অভিব্যক্তিএকটি ভেরিয়েবলে সংরক্ষিত একটি ফাংশন।

উদাহরণ

const x = function (a, b) { return a * b };

একটি ফাংশন এক্সপ্রেশন একটি ভেরিয়েবলে সংরক্ষণ করার পরে, ভেরিয়েবলটি একটি ফাংশন হিসাবে ব্যবহার করা যেতে পারে:

উদাহরণ

const multiply = function (a, b) { return a * b };

let z = multiply(4, 3);
console.log(z);  // 12

🎯মূল ধারণা:

ফাংশন এক্সপ্রেশন জাভাস্ক্রিপ্টে "প্রথম শ্রেণীর নাগরিক" ধারণা প্রকাশ করে। এর অর্থ:

  • ফাংশন ভেরিয়েবল সংরক্ষণ করা যেতে পারে
  • ফাংশন অন্যান্য ফাংশন আর্গুমেন্ট হিসাবে পাস করা যেতে পারে
  • অন্যান্য ফাংশন থেকে ফাংশন ফেরত দেওয়া যেতে পারে
  • রানটাইমে ফাংশন তৈরি করা যেতে পারে

বেনামী অপারেশন

উপরের ফাংশনটি আসলে aবেনামী ফাংশন(নামহীন ফাংশন)।

ভেরিয়েবলে সংরক্ষিত ফাংশনের জন্য ফাংশন নামের প্রয়োজন হয় না।

উদাহরণ: একটি বেনামী ফাংশন

const sayHello = function() {
    return "Hello World";
};

console.log(sayHello());  // "Hello World"

ভেরিয়েবল নাম ফাংশন কল করতে ব্যবহার করা হয়.

উদাহরণ: নামের ফাংশন এক্সপ্রেশন

const add = function add(a, b) { 
    return a + b;
};

এটি একটি নামকৃত ফাংশন এক্সপ্রেশন। এই নাম ডিবাগিং জন্য দরকারী.

ℹ️দ্রষ্টব্য:

ফাংশন এক্সপ্রেশন সাধারণত বেনামী ফাংশন তৈরি করতে ব্যবহৃত হয়।

উপরে ফাংশনsayHelloএকটি পরিবর্তনশীল মধ্যে সংরক্ষিত.

এটা চালানোর জন্য, আপনিsayHello()আপনি যে কল.

কার্যকরী অভিব্যক্তি সেমিকোলন ব্যবহার করে

একটি ফাংশন এক্সপ্রেশন সাধারণত একটি বিবৃতি হয়।

তাই এটি সাধারণত একটি সেমিকোলন দিয়ে শেষ হয়।

উদাহরণ

const add = function(a, b) { ফেরত a + b; }; // ← সেমিকোলন

📝সেমিকোলন নিয়ম:

  • ফাংশন সংজ্ঞা:একটি সেমিকোলন সাধারণত প্রয়োজন হয় না
  • কার্যকরী অভিব্যক্তি:একটি সেমিকোলন সাধারণত প্রয়োজন হয় (যেহেতু এটি একটি পরিবর্তনশীল অ্যাসাইনমেন্ট ঘোষণা)।
// ফাংশন সংজ্ঞা - কোন সেমিকোলন প্রয়োজন নেই ফাংশন যোগ(a, b) { ফেরত a + b; } // ফাংশন এক্সপ্রেশন - সেমিকোলন প্রয়োজন const multiply = function(a, b) { ফেরত a * b; };

ভেরিয়েবলে সংরক্ষিত ফাংশন

যেহেতু একটি ফাংশন এক্সপ্রেশন একটি ভেরিয়েবলের মধ্যে সংরক্ষণ করা হয়, এটি একটি মান হিসাবে ব্যবহার করা যেতে পারে।

অন্যান্য ফাংশন (কলব্যাক) ফাংশন পাস করার সময় এটি দরকারী।

উদাহরণ: আর্গুমেন্ট হিসাবে একটি ফাংশন পাস করা

function run(fn) {
    return fn();
}

const sayHello = function() {
    return "Hello";
};

let result = run(sayHello);
console.log(result);  // "Hello"

একটি ফাংশন এক্সপ্রেশন একটি ভেরিয়েবলকে বরাদ্দ করা যেতে পারে, অন্য ফাংশনে একটি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে, বা একটি ফাংশন থেকে ফিরে আসতে পারে।

আরো উদাহরণ:

// 1. ভেরিয়েবলে ফাংশন বরাদ্দ করুন const greet = function(name) { ফেরত `হ্যালো, ${name}!`; }; // 2. আর্গুমেন্ট হিসাবে ফাংশন পাসিং ফাংশন প্রক্রিয়া ব্যবহারকারী (কলব্যাক) { let user = { নাম: "জন", বয়স: 30}; ফিরে কলব্যাক (ব্যবহারকারী); } const getUserInfo = ফাংশন(ব্যবহারকারী) { রিটার্ন `${user.name} হল ${user.age} বছর বয়সী`; }; console.log(processUser(getUserInfo)); // "জন 30 বছর বয়সী" // 3. রিটার্ন ফাংশন ফাংশন createMultiplier(ফ্যাক্টর) { রিটার্ন ফাংশন (সংখ্যা) { রিটার্ন নম্বর * ফ্যাক্টর; }; } const double = createMultiplier(2); const triple = createMultiplier(3); console.log(ডবল(5)); // 10 console.log(ট্রিপল(5)); // 15

ফাংশন বনাম ফাংশন এক্সপ্রেশন

জাভাস্ক্রিপ্ট ফাংশনfunctionকীওয়ার্ড দিয়ে সংজ্ঞায়িত করা হয়

জাভাস্ক্রিপ্ট ফাংশন বিভিন্ন উপায়ে সংজ্ঞায়িত করা যেতে পারে।

জাভাস্ক্রিপ্টে, ফাংশন ঘোষণা এবং ফাংশন এক্সপ্রেশনগুলি ফাংশন সংজ্ঞায়িত করার বিভিন্ন উপায়, তাদের বিভিন্ন সিনট্যাক্স এবং কীভাবে সেগুলি পরিচালনা করা হয়:

কার্যকলাপ বিজ্ঞপ্তি কার্যকরী অভিব্যক্তি
function add(a, b) {return a + b;} const add = function(a, b) {return a + b;};
functionকীওয়ার্ড functionকীওয়ার্ড
একটি ফাংশন নাম প্রয়োজন কোন ফাংশন নামের প্রয়োজন নেই (বেনামী)
বন্ধনীতে পরামিতি বন্ধনীতে পরামিতি
কোড ব্লক বন্ধনী কোড ব্লক বন্ধনী
কোনো সেমিকোলনের প্রয়োজন নেই সেমিকোলন প্রয়োজন (ভেরিয়েবল অ্যাসাইনমেন্টের কারণে)

⚖️উভয় একইভাবে কাজ করে:

আপনি যখন তাদের কল করেন তখন উভয়ই একই কাজ করে। পার্থক্য হল সময় তারা আপনার কোড পেতে.

মাথার উপরে তোলা

কার্যকলাপ বিজ্ঞপ্তি

ফাংশন ঘোষণাগুলিকে সংজ্ঞায়িত করার আগে বলা যেতে পারে।

// এটা কাজ করবে যাক যোগফল = যোগ করুন(2, 3); // 5 ফাংশন যোগ(a, b) { ফেরত a + b; }

ফাংশন ঘোষণাগুলি তাদের সুযোগের উপরে "ড্রপ" করা হয়। এর মানে হল যে ফাংশনটি কোডে সংজ্ঞায়িত হওয়ার আগে কল করা যেতে পারে।

কার্যকরী অভিব্যক্তি

ফাংশন এক্সপ্রেশনগুলিকে সংজ্ঞায়িত করার আগে বলা যাবে না।

// এটি একটি ত্রুটি তৈরি করবে যাক যোগফল = যোগ করুন(2, 3); // ⛔ ত্রুটি! const add = function(a, b) { ফেরত a + b; };

ফাংশন এক্সপ্রেশন তৈরি করা হয় যখন বাস্তবায়ন তাদের সংজ্ঞায় পৌঁছায় এবং সেই বিন্দুর আগে বলা যাবে না।

প্রকৃত ত্রুটি উদাহরণ:

// এটি একটি ত্রুটি তৈরি করবে console.log(greet("জন")); // রেফারেন্স ত্রুটি const greet = function(name) { ফেরত `হ্যালো, ${name}!`; }; // এটা কাজ করবে console.log(greet("জন")); // "হ্যালো, জন!" const greet = function(name) { ফেরত `হ্যালো, ${name}!`; };

মূল পার্থক্য

ব্যাপার কার্যকলাপ বিজ্ঞপ্তি কার্যকরী অভিব্যক্তি
সিনট্যাক্স একটি নাম প্রয়োজন কোন নাম প্রয়োজন নেই (বেনামী)
মাথার উপরে তোলা উত্তোলন (কলের আগে ব্যবহৃত) উত্তোলিত নয় (সংজ্ঞায়িত করার পরেই ব্যবহার করা যেতে পারে)
নমনীয়তা তারা কিভাবে এবং কোথায় ব্যবহার করা হয় সে সম্পর্কে আরও নমনীয়তা অফার করে ভেরিয়েবলে বরাদ্দ করতে এবং লুপ তৈরি করতে আরও নমনীয়তা
সেমিকোলন প্রয়োজন নেই প্রয়োজনীয় (পরিবর্তনশীল বরাদ্দের পর থেকে)
আবেদন সাধারণ উদ্দেশ্যমূলক কার্যক্রম কলব্যাক, ইভেন্ট হ্যান্ডলার, গতিশীল ফাংশন

💡মনে রাখার জন্য:

  • ওভারহেড বৃদ্ধি:শুধুমাত্র কার্যকলাপ বিজ্ঞপ্তি সম্পূর্ণরূপে উত্তোলন করা হয়
  • বেনামী ফাংশন:ফাংশন এক্সপ্রেশন সাধারণত বেনামী হয়
  • পরিবর্তনশীল অ্যাসাইনমেন্ট:ফাংশন এক্সপ্রেশন সবসময় ভেরিয়েবল বরাদ্দ করা হয়
  • সময়ের সাথে সাথে উন্নয়ন:রানটাইমে ফাংশন এক্সপ্রেশন তৈরি করা যেতে পারে

প্রতিটি কখন ব্যবহার করবেন

সাধারণ-উদ্দেশ্য ফাংশনের জন্য ফাংশন ঘোষণা ব্যবহার করুন

গুরুত্বপূর্ণ, পুনরায় ব্যবহারযোগ্য ফাংশনের জন্য ফাংশন ঘোষণা ব্যবহার করুন।

// ফাংশন ঘোষণা ফাংশন calculateArea(প্রস্থ, উচ্চতা) { রিটার্ন প্রস্থ * উচ্চতা; } // যেকোনো জায়গায় ব্যবহার করা যাবে console.log(calculateArea(10, 5)); // 50

ভেরিয়েবলে ফাংশন বরাদ্দ করার সময় ফাংশন এক্সপ্রেশন ব্যবহার করুন

যখন আপনি ভেরিয়েবলে ফাংশন সংরক্ষণ করতে চান তখন ফাংশন এক্সপ্রেশন ব্যবহার করুন।

// ফাংশন এক্সপ্রেশন const greetUser = ফাংশন(নাম) { ফেরত `হ্যালো, ${name}!`; }; // একটি পরিবর্তনশীল হিসাবে ব্যবহার করুন console.log(greetUser("John")); // "হ্যালো, জন!"

কলব্যাক এবং ইভেন্ট হ্যান্ডলারে ফাংশন এক্সপ্রেশন ব্যবহার করুন

অন্যান্য ফাংশনে আর্গুমেন্ট হিসাবে পাস করার সময় ফাংশন এক্সপ্রেশন ব্যবহার করুন।

// callback
button.addEventListener('click', function() {
    console.log('Button clicked!');
});

// event handler
document.addEventListener('DOMContentLoaded', function() {
    console.log('DOM is ready!');
});

পরে এই টিউটোরিয়ালে

ফাংশন এক্সপ্রেশনগুলি উচ্চ মাত্রার নমনীয়তা প্রদান করে এবং বিভিন্ন উদ্দেশ্যে জাভাস্ক্রিপ্টে ব্যাপকভাবে ব্যবহৃত হয় এবং আপনি নিম্নলিখিত অধ্যায়ে আরও ফাংশন এক্সপ্রেশন দেখতে পাবেন:

কলব্যাক

অন্যান্য ফাংশনের আর্গুমেন্ট হিসাবে ফাংশন পাস করা, যেমন ইভেন্ট লিসেনার বা অ্যাসিঙ্ক্রোনাস ফাংশন।

setTimeout(function() {
    console.log('3 seconds passed');
}, 3000);

Closures

ফাংশন এক্সপ্রেশনগুলি বন্ধ তৈরি করতে সাহায্য করে, যা ফাংশনগুলিকে তাদের সুযোগ থেকে ভেরিয়েবলগুলিকে মনে রাখতে এবং অ্যাক্সেস করতে দেয়।

function counter() {
    let count = 0;
    return function() {
        return ++count;
    };
}

তীর ফাংশন

সংক্ষিপ্ত তীর ফাংশন সিনট্যাক্স (=>) কার্যকরী অভিব্যক্তি লেখার একটি আধুনিক উপায়।

const add = (a, b) => a + b;

IIFEs

যে ফাংশনগুলি একবার সংজ্ঞায়িত করা হয় সেগুলি সাধারণত ব্যক্তিগত স্কোপ তৈরি করতে এবং বিশ্ব পরিবর্তনশীল দ্বন্দ্ব এড়াতে ব্যবহৃত হয়।

(ফাংশন() { // ব্যক্তিগত সুযোগ })();

সাধারণ ভুল

সেমিকোলন ভুলে যাওয়া

ফাংশন এক্সপ্রেশন একটি বিবৃতি অংশ এবং সাধারণত;দিয়ে শেষ হয়

// ত্রুটি: const add = function(a, b) { ফেরত a + b; } // সেমিকোলন নেই // ঠিক আছে: const add = function(a, b) { ফেরত a + b; }; // একটি সেমিকোলন আছে

আগাম ফোন করছি

একটি ফাংশন এক্সপ্রেশনকে সংজ্ঞায়িত করার আগে বলা যাবে না।

// ত্রুটি: console.log(greet("জন")); // রেফারেন্স ত্রুটি const greet = function(name) { ফেরত `হ্যালো, ${name}!`; }; // ঠিক আছে: const greet = function(name) { ফেরত `হ্যালো, ${name}!`; }; console.log(greet("জন")); // "হ্যালো, জন!"

বিভ্রান্তিকর নোট এবং কল

sayHelloফাংশন হয়।sayHello()ফাংশন কল.

const sayHello = function() { "হ্যালো" ফেরত দিন; }; // ত্রুটি: let func = sayHello(); // func = "হ্যালো" (ফাংশনটি কল করে) // ঠিক আছে: let func = sayHello; // func = ফাংশন (ফাংশন বোঝায়)

বিভ্রান্তিকর ফাংশনের নাম এবং ভেরিয়েবল

অভিব্যক্তিতে, পরিবর্তনশীল নামটি ফাংশনের রেফারেন্স।

// ত্রুটি: const multiply = ফাংশন বার(a, b) { ফেরত a * b; }; console.log(বার(2, 3)); // রেফারেন্স ত্রুটি: সময় সংজ্ঞায়িত করা হয় না // ঠিক আছে: const multiply = ফাংশন বার(a, b) { ফেরত a * b; }; console.log(গুণ করুন(2, 3)); // 6 (use variable name)

কার্যকরী অভিব্যক্তি অনুশীলন করুন

sayHelloএবংsayHello()মধ্যে পার্থক্য কি?

sayHelloএবংsayHello()মধ্যে পার্থক্য কি?

দুটোই একই, কোনো পার্থক্য নেই
✗ ভুল! এটি একটি গুরুত্বপূর্ণ পার্থক্য।sayHelloকার্যকলাপ প্রতিনিধিত্ব করে,sayHello()ফাংশন চালায়।
sayHelloফাংশন চালানো,sayHello()কার্যকলাপ নির্দেশ করে
✗ ভুল! এটা উল্টাপাল্টা.sayHelloকার্যকলাপ প্রতিনিধিত্ব করে,sayHello()ফাংশন চালায়।
sayHelloকার্যকলাপ প্রতিনিধিত্ব করে,sayHello()ফাংশন চালায়
✓ ঠিক আছে!sayHelloএকটি ফাংশন উদ্ধৃতি (ফাংশন নিজেই বোঝায়)।sayHello()ফাংশন কল করছে (এটি চালাচ্ছে এবং ফলাফল ফেরত দিচ্ছে)।
sayHelloপরিবর্তনশীল,sayHello()ফাংশন
✗ ভুল!sayHelloএকটি পরিবর্তনশীল হতে পারে (একটি ফাংশন এক্সপ্রেশনে), তবে এটি একটি ফাংশনকেও উপস্থাপন করতে পারে। পার্থক্যটি বন্ধনীর উপস্থিতিতে রয়েছে।

💡সমাধান বর্ণনা:

জাভাস্ক্রিপ্ট, একটি ফাংশনউল্লেখ করেএবং যেকলিংএর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে:

// ফাংশন এক্সপ্রেশন const sayHello = function() { "হ্যালো ওয়ার্ল্ড" ফেরত দিন; }; // রেফারেন্স - ফাংশন নিজেই প্রদান করে let funcReference = sayHello; console.log(funcReference); // ফাংশন() { রিটার্ন "হ্যালো ওয়ার্ল্ড"; } console.log(funcReference এর প্রকার); // "ফাংশন" // কলিং - ফাংশনটি কার্যকর করে এবং ফলাফল প্রদান করে let funcResult = sayHello(); console.log(funcResult); // "হ্যালো ওয়ার্ল্ড" console.log(funcResult এর প্রকার); // "স্ট্রিং"

কার্যকরী নোটভেরিয়েবল যে মেমরি একটি অপারেশন নির্দেশ. আপনি বন্ধনী যোগ না করা পর্যন্ত তারা ফাংশন চালায় না।

ফাংশন কলঅবিলম্বে ফাংশন এবং তার চালানreturnমান (যদি থাকে) প্রদান করে।

🎯ব্যবহারিক প্রয়োগ:

  • sayHello- কলব্যাক প্যারামিটার হিসাবে পাস করার সময় ব্যবহার করুন
  • sayHello()- আপনি যখন তাত্ক্ষণিক ফলাফল চান তখন ব্যবহার করুন
// কলব্যাক: ফাংশনটি প্রেরণ করুন button.addEventListener('ক্লিক', সেহেলো); // অবিলম্বে কল: ফলাফল পান লেট greeting = sayHello();

পরবর্তী অধ্যায়

➡️ JavaScript Arrow Functions

পরবর্তী পাঠে, আমরা তীর ফাংশন সম্পর্কে শিখব—ফাংশন লেখার জন্য একটি আধুনিক, সংক্ষিপ্ত বাক্য গঠন:

  • তীর ফাংশন সিনট্যাক্স
  • thisজন্য নিয়ন্ত্রণ
  • অন্তর্নিহিত রিটার্ন
  • তীর ফাংশনের সীমাবদ্ধতা