Function Methods

লোড্যাশ (Lodash) - Web Development

237

Lodash লাইব্রেরি JavaScript এর function manipulation বা ফাংশন ম্যানিপুলেশনের জন্য অনেক কার্যকরী ফাংশন সরবরাহ করে। এগুলি ফাংশনগুলিকে অপটিমাইজ করতে, তাদের ডিবাউন্স (debounce) বা থ্রোটল (throttle) করতে, এবং ফাংশন কোডের কার্যকারিতা বাড়াতে ব্যবহৃত হয়। এই ফাংশনগুলি JavaScript কোডের পারফরম্যান্স উন্নত করতে এবং কোড লেখার সময়কে সাশ্রয় করতে সহায়তা করে।


১. _.debounce()

_.debounce() ফাংশনটি একটি ফাংশনের একাধিক কল থেকে বিরত থাকার জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট সময়ের মধ্যে একই ফাংশনকে একাধিকবার কল হতে না দেয় এবং শুধু শেষ কলটি এক্সিকিউট করে। এটি সাধারণত ইউজার ইনপুট বা স্ক্রোল ইভেন্টের জন্য ব্যবহৃত হয়।

উদাহরণ:

const _ = require('lodash');

let counter = 0;

// ডিবাউন্স ফাংশন ব্যবহার করা
const increment = _.debounce(() => {
  counter++;
  console.log(counter);
}, 1000);

// একাধিকবার কল করা হলেও, এটি শুধুমাত্র একবার কার্যকর হবে
increment();
increment();
increment();

এখানে _.debounce() ফাংশনটি এক সেকেন্ডের মধ্যে একাধিক কল হলে কেবল একবারই ফাংশনটি কার্যকর করবে।


২. _.throttle()

_.throttle() ফাংশনটি একটি ফাংশনকে নির্দিষ্ট সময় অন্তর অন্তর একবার কল করতে সীমাবদ্ধ করে। এটি ফাংশনটি প্রতি নির্দিষ্ট সময় পরে একবার চালানোর জন্য থ্রোটলিং করে, যেমন স্ক্রোলিং ইভেন্ট বা রেসপন্স টাইম কমানোর জন্য এটি ব্যবহৃত হয়।

উদাহরণ:

const _ = require('lodash');

let counter = 0;

// থ্রোটল ফাংশন ব্যবহার করা
const increment = _.throttle(() => {
  counter++;
  console.log(counter);
}, 1000);

// একাধিক কল করলেও প্রতি সেকেন্ডে একবারই কার্যকর হবে
increment();
increment();
increment();

এখানে _.throttle() ফাংশনটি প্রতি সেকেন্ডে একবারই ফাংশনটি কার্যকর করতে সক্ষম।


৩. _.once()

_.once() ফাংশনটি একটি ফাংশনকে শুধুমাত্র একবারই কল করা নিশ্চিত করে। একবার ফাংশনটি কল হলে, পরবর্তীতে আর এটি কল করা যাবে না। এটি বিশেষভাবে ব্যবহৃত হয় যখন কোন একক এক্সিকিউশন প্রয়োজন হয়, যেমন কোন initialization বা event listener।

উদাহরণ:

const _ = require('lodash');

// একবার কল হওয়ার ফাংশন
const initialize = _.once(() => {
  console.log('Initialization complete!');
});

// প্রথম কল
initialize(); // Initialization complete!

// পরবর্তী কল হবে না
initialize(); // (কিছুই হবে না)

এখানে _.once() ফাংশনটি initialize ফাংশনটি শুধুমাত্র একবার কল করতে দেয়।


৪. _.bind()

_.bind() ফাংশনটি একটি নতুন ফাংশন তৈরি করে যা নির্দিষ্ট this কনটেক্সট এবং আর্গুমেন্ট সহ একটি ফাংশনকে কল করতে সাহায্য করে। এটি বিশেষভাবে ব্যবহৃত হয় যখন আপনি কোনো ফাংশনকে নির্দিষ্ট কনটেক্সটে কল করতে চান।

উদাহরণ:

const _ = require('lodash');

let object = {
  name: 'Lodash',
  greet: function(greeting) {
    console.log(greeting + ' ' + this.name);
  }
};

// _.bind() ব্যবহার করে ফাংশনটি নতুন কনটেক্সটে বাউন্ড করা
let greetLodash = _.bind(object.greet, object);

// greetLodash ফাংশনটি object এর কনটেক্সটে কল হবে
greetLodash('Hello'); // Hello Lodash

এখানে _.bind() ফাংশনটি greet ফাংশনকে object এর this কনটেক্সটের সাথে বাউন্ড করে।


৫. _.wrap()

_.wrap() ফাংশনটি একটি ফাংশনকে একটি wrapper ফাংশনের মধ্যে আবদ্ধ করে। এটি মূল ফাংশনের কাজ করার আগে বা পরে কিছু অতিরিক্ত কোড চালানোর জন্য ব্যবহৃত হয়।

উদাহরণ:

const _ = require('lodash');

let greet = function(name) {
  return 'Hello ' + name;
};

// _.wrap() ব্যবহার করে greet ফাংশনের চারপাশে নতুন ফাংশন যোগ করা
let wrappedGreet = _.wrap(greet, function(func, name) {
  return func(name) + '!';
});

console.log(wrappedGreet('Lodash')); // Hello Lodash!

এখানে, _.wrap() ফাংশনটি greet ফাংশনের চারপাশে একটি নতুন ফাংশন যোগ করেছে যা greet ফাংশনটি কল করার পর ! যোগ করে ফিরিয়ে দেয়।


৬. _.delay()

_.delay() ফাংশনটি একটি ফাংশনকে একটি নির্দিষ্ট সময় পর কল করতে ব্যবহৃত হয়। এটি টাইমআউটের মতো কাজ করে, যেখানে আপনি একটি ফাংশন দেরিতে চালাতে পারেন।

উদাহরণ:

const _ = require('lodash');

// দেরিতে কল হওয়া ফাংশন
_.delay(function() {
  console.log('This is delayed!');
}, 2000); // 2 সেকেন্ড পর এটি কল হবে

এখানে, _.delay() ফাংশনটি ২ সেকেন্ড পর একটি ফাংশন কল করবে।


৭. _.ary()

_.ary() ফাংশনটি একটি ফাংশনকে নির্দিষ্ট আর্গুমেন্ট সংখ্যা নিয়ে কাজ করার জন্য তৈরি করে। এটি একটি নতুন ফাংশন তৈরি করে যা শুধুমাত্র নির্দিষ্ট সংখ্যক আর্গুমেন্ট নেবে, এবং অতিরিক্ত আর্গুমেন্টগুলিকে উপেক্ষা করবে।

উদাহরণ:

const _ = require('lodash');

let sum = function(a, b, c) {
  return a + b + c;
};

// _.ary() ব্যবহার করে ফাংশনটি দুটি আর্গুমেন্ট নেবে
let sumOfTwo = _.ary(sum, 2);

console.log(sumOfTwo(1, 2, 3)); // 3 (মোট আর্গুমেন্টের মধ্যে প্রথম দুইটি নিয়ে কাজ করবে)

এখানে _.ary() ফাংশনটি একটি নতুন ফাংশন তৈরি করেছে যা শুধুমাত্র দুইটি আর্গুমেন্ট নেবে।


উপসংহার

Lodash এর Function Methods গুলি ফাংশন ব্যবহারের ক্ষেত্রে কার্যকারিতা এবং পারফরম্যান্স উন্নত করতে সহায়তা করে। এগুলি ফাংশন ডিবাউন্স, থ্রোটল, এক্সিকিউশন কন্ট্রোল, আর্গুমেন্ট ম্যানিপুলেশন, টাইমআউট, এবং কোড রি-ইউজের জন্য উপকারী। Lodash ফাংশনগুলি কোডকে আরো কার্যকরী, নির্ভরযোগ্য এবং দক্ষ করে তোলে।

Content added By

_.debounce() এবং _.throttle() ফাংশনগুলি Lodash লাইব্রেরির দুটি শক্তিশালী ফাংশন যা JavaScript অ্যাপ্লিকেশনের পারফরম্যান্স অপটিমাইজ করার জন্য ব্যবহৃত হয়, বিশেষত যখন আপনি বিভিন্ন ইভেন্টের উপর কর্ম সম্পাদন করছেন, যেমন স্ক্রোলিং, টাইপিং, সাইজ চেঞ্জিং ইত্যাদি। এই ফাংশনগুলো মূলত ফাংশন কলগুলিকে নিয়ন্ত্রণ করতে সাহায্য করে, যাতে সিস্টেমের উপর অতিরিক্ত লোড না আসে এবং কর্মক্ষমতা বজায় থাকে।


১. _.debounce() – ডেবাউন্সিং (Debouncing)

_.debounce() ফাংশনটি একটি ফাংশনের কলের সংখ্যা সীমিত করে, যাতে সেটি একাধিকবার কল হওয়ার পরিবর্তে শুধুমাত্র নির্দিষ্ট সময় পর পর একবারই কল হয়। এটি সাধারণত ব্যবহার করা হয় যখন কোনো ইউজার একটানা কোনো অ্যাকশন (যেমন টাইপিং বা স্ক্রোলিং) করছে এবং আপনি চান যে সেই অ্যাকশনটি শুধুমাত্র একবার এবং নির্দিষ্ট সময় পরে সম্পাদিত হোক।

সাধারণ সিনট্যাক্স:

_.debounce(func, wait, [options])
  • func: যে ফাংশনটি ডেবাউন্স করতে হবে।
  • wait: সময়ের পরিমাণ (মিলিসেকেন্ড) যে সময় পরে ফাংশনটি কল করা হবে।
  • [options]: optional parameter, যা leading এবং trailing ফ্ল্যাগগুলি নিয়ন্ত্রণ করতে ব্যবহার করা হয়।

উদাহরণ:

const _ = require('lodash');

let count = 0;
const increment = () => {
  count++;
  console.log(count);
};

// Debounced function with 1 second delay
const debouncedIncrement = _.debounce(increment, 1000);

// ইভেন্ট ট্রিগার হলে এই ফাংশনটি একাধিকবার কল হবে, তবে শুধুমাত্র 1 সেকেন্ড পর একবারই কল হবে।
debouncedIncrement();
debouncedIncrement();
debouncedIncrement(); // শুধু একবার কল হবে 1 সেকেন্ড পরে।

ব্যাখ্যা: এখানে, debouncedIncrement() ফাংশনটি একাধিকবার কল করা হয়েছে, তবে 1 সেকেন্ড পর একবারই কার্যকর হবে। একাধিক কল গুলি একত্রিত হয়ে, সময়ের শেষে একটি একক কল হবে।


২. _.throttle() – থ্রটলিং (Throttling)

_.throttle() ফাংশনটি একটি ফাংশনকে নির্দিষ্ট সময় পর পর একবারই কল করার জন্য ব্যবহৃত হয়। এটি ইভেন্টের মাধ্যমে ফাংশন কলের সংখ্যা নিয়ন্ত্রণ করতে সাহায্য করে। _.throttle() মূলত ব্যবহার করা হয় যখন আপনি চান যে কোনো ইভেন্ট প্রতি নির্দিষ্ট সময় অন্তর অন্তর ট্রিগার হোক, যেমন স্ক্রলিং বা উইন্ডো রিসাইজিং ইত্যাদি।

সাধারণ সিনট্যাক্স:

_.throttle(func, wait, [options])
  • func: যে ফাংশনটি থ্রটল করতে হবে।
  • wait: সময়ের পরিমাণ (মিলিসেকেন্ড) যে সময় পরে ফাংশনটি কল করা হবে।
  • [options]: optional parameter, যা leading এবং trailing ফ্ল্যাগগুলি নিয়ন্ত্রণ করতে ব্যবহার করা হয়।

উদাহরণ:

const _ = require('lodash');

let scrollCount = 0;
const logScroll = () => {
  scrollCount++;
  console.log('Scrolled:', scrollCount);
};

// Throttled function with 1 second delay
const throttledScroll = _.throttle(logScroll, 1000);

// ইভেন্ট ট্রিগার হলে, প্রতি 1 সেকেন্ডে একবার logScroll কল হবে।
window.addEventListener('scroll', throttledScroll);

ব্যাখ্যা: এখানে, throttledScroll ফাংশনটি প্রতি 1 সেকেন্ডে একবার কল হবে, যখনই স্ক্রলিং হবে। যদি স্ক্রলিং একাধিকবার ঘটে, তাহলে প্রতি সেকেন্ডে একবারই logScroll() কল হবে, ফলে সিস্টেমের উপর অতিরিক্ত লোড পড়বে না।


৩. _.debounce() এবং _.throttle() এর মধ্যে পার্থক্য

বৈশিষ্ট্য_.debounce()_.throttle()
কাজের ধরণএকাধিক কলের মধ্যে সর্বশেষ কলটি শুধুমাত্র নির্দিষ্ট সময় পর করা হয়।নির্দিষ্ট সময় পর পর ফাংশনটি একবার কল হয়।
ব্যবহারটাইপিং, ফিল্টারিং, সার্চ ইত্যাদিতে ব্যবহার করা হয় যেখানে ফলাফল পরবর্তী কলের সাথে সিঙ্ক্রোনাইজ করা হয়।স্ক্রোলিং, উইন্ডো রিসাইজ, ইভেন্ট লিসনার ইত্যাদিতে ব্যবহৃত হয়।
সময়কলগুলির মধ্যে নির্দিষ্ট সময়ের পরে একটি একক কল হয়।প্রতি নির্দিষ্ট সময় অন্তর কল হয়।
উদাহরণসার্চ বার টাইপিং, অটো-কমপ্লিট ফিচার।স্ক্রল ইভেন্ট, উইন্ডো সাইজ পরিবর্তন।

৪. Performance Optimization

_.debounce() এবং _.throttle() ব্যবহার করলে আপনি আপনার অ্যাপ্লিকেশন বা ওয়েবসাইটের পারফরম্যান্স অনেকটা উন্নত করতে পারেন। যেসব পরিস্থিতিতে একাধিক ফাংশন কল হচ্ছে, যেমন ইউজারের স্ক্রোলিং, টাইপিং, অথবা সাইজ চেঞ্জ, সেখানে এই ফাংশনগুলো ব্যবহার করলে unnecessary function calls কমিয়ে আনা যায়, ফলে ল্যাগ এবং স্লো রেসপন্স রেট কমে যায়।

  • Debouncing: ব্যবহারকারী যখন দ্রুত কিছু টাইপ করে, তখন প্রতিটি টাইপ ইভেন্টের জন্য ফাংশন কল করা উচিত নয়। _.debounce() ব্যবহার করলে আপনি নিশ্চিত করতে পারেন যে ব্যবহারকারী টাইপিং শেষ করার পরে, সার্চ বা অটো কমপ্লিট কেবল একবার ট্রিগার হবে।
  • Throttling: স্ক্রোলিং বা সাইজ চেঞ্জিংয়ের মতো ইভেন্টে, একাধিক কলের পরিবর্তে আপনি প্রতি নির্দিষ্ট সময় পর পর একটি কল হ্যান্ডল করতে পারবেন। এটি পারফরম্যান্সের জন্য উপকারী, কারণ এটি অতিরিক্ত কল করা এড়ায়।

উপসংহার

Lodash এর _.debounce() এবং _.throttle() ফাংশনগুলি ইভেন্ট ড্রিভেন অ্যাপ্লিকেশনগুলিতে পারফরম্যান্স অপটিমাইজেশনের জন্য অত্যন্ত কার্যকরী। এগুলি সাহায্যে আপনি অতিরিক্ত ফাংশন কল কমিয়ে, ইউজারের জন্য স্মুথ এবং দ্রুত অভিজ্ঞতা নিশ্চিত করতে পারেন। _.debounce() ব্যবহার করে আপনি টাইপিং বা সার্চের মত ইভেন্টগুলিকে অপ্টিমাইজ করতে পারবেন, এবং _.throttle() ব্যবহার করে আপনি স্ক্রলিং, রিসাইজিং ইত্যাদি ইভেন্টগুলো নিয়ন্ত্রণ করতে পারবেন।

Content added By

Lodash লাইব্রেরির _.once() এবং _.after() ফাংশনগুলি আপনাকে ফাংশনের execution নিয়ন্ত্রণ করার সুযোগ দেয়। বিশেষত, এই ফাংশনগুলি ব্যবহার করে আপনি নির্দিষ্ট সংখ্যক বার একটি ফাংশনকে চালাতে পারেন, যেমন একটি ফাংশন একবারই চালানো হবে অথবা একটি ফাংশন নির্দিষ্ট সংখ্যক কলের পরে চালানো হবে।

এখানে আমরা _.once() এবং _.after() ফাংশনগুলির মাধ্যমে ফাংশন execution কিভাবে নিয়ন্ত্রণ করতে হয় তা বিস্তারিতভাবে আলোচনা করব।


১. _.once() – ফাংশন একবারই চালানো

_.once() ফাংশনটি একটি ফাংশনকে শুধুমাত্র একবার চালাতে সক্ষম করে। এর অর্থ হলো, আপনি যদি একই ফাংশন একাধিক বার কল করেন, তবে এটি শুধুমাত্র প্রথম কলের পর একবারই execute হবে এবং পরবর্তী কলগুলো উপেক্ষা করা হবে।

Syntax:

_.once(func);
  • func: যেটি একবারই execute হবে।

উদাহরণ:

const _ = require('lodash');

let initialize = _.once(() => {
  console.log('Initialization complete');
});

initialize(); // 'Initialization complete'
initialize(); // কিছুই হবে না, কারণ এটি একবারই চলবে
initialize(); // কিছুই হবে না, কারণ এটি একবারই চলবে

ব্যাখ্যা: এখানে initialize ফাংশনটি _.once() এর মাধ্যমে একবারই execute হবে, এবং পরবর্তী কলগুলোতে এটি আর execute হবে না। এটি কার্যকরী যখন আপনি কোন সেটআপ বা initialization কোড যা শুধুমাত্র একবার চালানো দরকার, তাতে ব্যবহার করতে পারেন।


২. _.after() – নির্দিষ্ট সংখ্যক কলের পরে ফাংশন চালানো

_.after() ফাংশনটি একটি ফাংশনকে নির্দিষ্ট সংখ্যক বার কল করার পরে execute হতে বলে। এর মানে হলো, যখন আপনি যে ফাংশনটি কল করবেন, তা নির্দিষ্ট সংখ্যক times পর run হবে।

Syntax:

_.after(n, func);
  • n: যে সংখ্যক বার ফাংশনটি কল হতে হবে।
  • func: ফাংশনটি যেটি কল করার পর execute হবে।

উদাহরণ:

const _ = require('lodash');

let greetAfterThreeTimes = _.after(3, () => {
  console.log('Hello, World!');
});

greetAfterThreeTimes(); // কিছুই হবে না
greetAfterThreeTimes(); // কিছুই হবে না
greetAfterThreeTimes(); // 'Hello, World!' (তিনবার কল করার পর)

ব্যাখ্যা: এখানে greetAfterThreeTimes ফাংশনটি তিনবার কল হওয়ার পর Hello, World! মেসেজটি console এ প্রদর্শিত হবে। প্রথম দুটি কল কোন প্রভাব ফেলবে না, কারণ _.after(3, ...) এ তিনবার কল হওয়ার পরে func execute হবে।

এটি সাধারণত ব্যবহার করা হয় যখন আপনি কোন কাজ করতে চান যা নির্দিষ্ট সংখ্যক কলের পরে এক্সিকিউট হবে, যেমন অনেকগুলি AJAX কলের পরে একবার callback function call করা।


ব্যবহারিক উদাহরণ

উদাহরণ ১: _.once() ব্যবহার

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

const _ = require('lodash');

let connectToDatabase = _.once(() => {
  console.log('Database connection established');
});

connectToDatabase(); // 'Database connection established'
connectToDatabase(); // কিছুই হবে না

এখানে connectToDatabase ফাংশনটি _.once() এর মাধ্যমে নিশ্চিত করা হয়েছে যে এটি একবারই execute হবে, পরবর্তী সময়ে একাধিক কল হলেও কিছু হবে না।

উদাহরণ ২: _.after() ব্যবহার

ধরা যাক, আপনি তিনটি API কল করার পর একটি ফাংশন চালাতে চান, যা শুধুমাত্র তিনটি কলের পরে trigger হবে।

const _ = require('lodash');

let processAfterAllCalls = _.after(3, () => {
  console.log('All API calls completed');
});

processAfterAllCalls(); // কিছুই হবে না
processAfterAllCalls(); // কিছুই হবে না
processAfterAllCalls(); // 'All API calls completed'

এখানে _.after(3, ...) ফাংশনটি তিনটি API কল করার পরে execute হবে। এর ফলে, ফাংশনটি পরবর্তী তিনটি কলের পরে trigger হবে এবং একবারই run করবে।


উপসংহার

  • _.once() ফাংশনটি একটি ফাংশনকে শুধুমাত্র একবার execute করতে সক্ষম করে, যতবারই সেটি কল করা হোক না কেন।
  • _.after() ফাংশনটি একটি ফাংশনকে নির্দিষ্ট সংখ্যক কলের পরে execute করতে সক্ষম করে, যেমন তিনবার কল করার পর একবার রান করবে।

এই দুটি ফাংশন ফাংশন execution নিয়ন্ত্রণে সাহায্য করে, যেখানে আপনি চাচ্ছেন যে ফাংশনটি একবার বা কিছু নির্দিষ্ট সংখ্যক times পরই execute হোক। এগুলি সাধারণত API কল, initialization, বা অন্য যেকোনো কাজ যেখানে শুধুমাত্র একবার বা নির্দিষ্ট times কাজটি করতে হবে, সেক্ষেত্রে ব্যবহৃত হয়।

Content added By

Lodash লাইব্রেরিতে _.curry() এবং _.partial() দুটি শক্তিশালী ফাংশন রয়েছে, যেগুলি Currying এবং Partial Application ধারণা বাস্তবায়ন করতে ব্যবহৃত হয়। এগুলি আপনাকে আপনার ফাংশনগুলিকে আরও নমনীয় এবং পুনরায় ব্যবহারযোগ্য (reusable) করে তোলে, এবং কোডকে আরও পরিষ্কার এবং সহজে ব্যবস্থাপনা করা যায়।

১. Currying এবং Partial Application এর ধারণা

  • Currying: এটি একটি ফাংশনকে এমনভাবে পরিবর্তন করা, যাতে এটি একাধিক আর্গুমেন্ট নেয়ার পরিবর্তে একবারে একটি আর্গুমেন্ট নেয় এবং পরবর্তীতে বাকি আর্গুমেন্টগুলো আসতে পারে। এটি ধীরে ধীরে ফাংশনকে পূর্ণ করতে দেয়।
  • Partial Application: এটি একটি প্রক্রিয়া যেখানে একটি ফাংশনের কিছু আর্গুমেন্ট আগে থেকেই নির্ধারিত হয়ে যায়, এবং বাকি আর্গুমেন্টগুলো পরবর্তীতে দেয়া হয়।

Lodash এ _.curry() এবং _.partial() এই দুটি ধারণার বাস্তবায়ন করে।


২. _.curry() – Currying

_.curry() ফাংশনটি একটি ফাংশনকে currying করে, অর্থাৎ এটি ফাংশনের আর্গুমেন্টগুলোকে একের পর এক গ্রহণ করতে দেয়। এটি ফাংশনকে এমনভাবে তৈরি করে যাতে আপনি প্রাথমিকভাবে কিছু আর্গুমেন্ট পাস করতে পারেন এবং পরে বাকি আর্গুমেন্টগুলিও পাস করা যাবে।

Syntax:

_.curry(func)
  • func: যে ফাংশনটিকে currying করতে হবে।

উদাহরণ:

const _ = require('lodash');

// একটি সাধারণ function
function add(a, b, c) {
  return a + b + c;
}

// Currying করা function
let curriedAdd = _.curry(add);

let result = curriedAdd(1)(2)(3);
console.log(result); // 6

এখানে, add() ফাংশনটি _.curry() এর মাধ্যমে currying করা হয়েছে। প্রথমে 1 পাস করে, তারপর 2, এবং শেষে 3 পাস করার মাধ্যমে আমরা পুরো add() ফাংশনের ফলাফল পেয়েছি।


৩. _.partial() – Partial Application

_.partial() ফাংশনটি একটি ফাংশনের আংশিক আর্গুমেন্ট প্রদান করে এবং বাকি আর্গুমেন্টগুলোর জন্য ফাংশনটিকে পরে কল করার সুযোগ দেয়। এটি মূলত এক বা একাধিক আর্গুমেন্ট আগে থেকেই ফিক্স করে এবং পরবর্তীতে অন্যান্য আর্গুমেন্ট পাস করতে দেয়।

Syntax:

_.partial(func, [partials])
  • func: যে ফাংশনটি আংশিকভাবে নির্ধারণ করতে হবে।
  • [partials]: আর্গুমেন্ট যা আগে থেকেই নির্ধারণ করা হবে।

উদাহরণ:

const _ = require('lodash');

// একটি সাধারণ function
function greet(greeting, name) {
  return `${greeting}, ${name}!`;
}

// Partial application করে greet function তৈরি করা
let greetHello = _.partial(greet, 'Hello');

let result = greetHello('John');
console.log(result); // 'Hello, John!'

এখানে, greet() ফাংশনের প্রথম আর্গুমেন্ট Hello আগেই নির্ধারণ করা হয়েছে _.partial() ব্যবহার করে, এবং পরবর্তীতে name প্যারামিটার পাস করা হচ্ছে।


৪. _.curry() এবং _.partial() এর মধ্যে পার্থক্য

  • Currying: Currying একটি ফাংশনকে এমনভাবে তৈরি করে যাতে আপনি আর্গুমেন্টগুলো একের পর এক প্রদান করতে পারেন। এটি প্রতিটি আর্গুমেন্ট পৃথকভাবে নেয় এবং ফাংশনের কাজটি পুরোপুরি সম্পন্ন হওয়ার আগে প্রত্যেকটি অংশের জন্য আর্গুমেন্ট নেয়।
  • Partial Application: Partial application এমন একটি পদ্ধতি, যেখানে আপনি ফাংশনের কিছু আর্গুমেন্ট আগেই নির্ধারণ করে দেন এবং বাকি আর্গুমেন্টগুলো পরবর্তীতে পাস করেন। এটি আর্গুমেন্টগুলি আগেই স্থির করে ফাংশনটিকে আরও নির্দিষ্ট কাজে ব্যবহার করার সুযোগ দেয়।

৫. Combining _.curry() and _.partial()

_.curry() এবং _.partial() একত্রে ব্যবহার করা যেতে পারে যাতে আপনি খুব নমনীয় ফাংশন তৈরি করতে পারেন, যা নির্দিষ্ট কাজগুলো আরও সহজ করে দেয়।

উদাহরণ:

const _ = require('lodash');

// একটি সাধারণ function
function calculatePrice(price, tax, discount) {
  return price + (price * tax) - discount;
}

// Partial function: Tax হার fix করা হলো
let calculateWithTax = _.partial(calculatePrice, _, 0.1);

// Currying করা function: Discount কে একে একে পাস করা যাবে
let curriedCalculate = _.curry(calculateWithTax);

let result = curriedCalculate(100)(5); // 100 price, 0.1 tax, 5 discount
console.log(result); // 105

এখানে, প্রথমে _.partial() ব্যবহার করে tax কে fix করা হয়েছে, এবং পরবর্তীতে _.curry() ব্যবহার করে price এবং discount আলাদাভাবে পাস করা যাচ্ছে।


উপসংহার

Lodash এর _.curry() এবং _.partial() ফাংশনগুলো Currying এবং Partial Application ধারণাগুলিকে বাস্তবায়ন করতে সাহায্য করে। এগুলি ব্যবহার করলে ফাংশনগুলো আরও নমনীয়, পুনরায় ব্যবহারযোগ্য এবং দ্রুত হবে। Currying একটি ফাংশনকে আরও পরিষ্কারভাবে ডাকা যায়, যখন Partial Application ফাংশনের আর্গুমেন্টগুলিকে আগেই কিছু অংশ নির্ধারণ করে কাজে লাগানো সম্ভব করে তোলে।

Content added By

Lodash এর _.bind() এবং _.bindKey() ফাংশন দুটি অত্যন্ত শক্তিশালী টুল যা JavaScript এর function binding-এর কাজকে সহজ এবং আরও নির্ভরযোগ্য করে তোলে। এগুলি মূলত function এর context (this) এবং arguments নির্ধারণ করার জন্য ব্যবহৃত হয়। এই ফাংশনগুলির মাধ্যমে আপনি একটি ফাংশনকে নির্দিষ্ট context এর সাথে "bind" করতে পারেন, যাতে এটি নির্দিষ্ট object বা ভ্যালু দ্বারা কল হয়।


১. _.bind() ফাংশন

_.bind() ফাংশনটি একটি function কে একটি নির্দিষ্ট this context এবং পূর্বনির্ধারিত arguments এর সাথে bind করে দেয়, অর্থাৎ আপনি যখন function টি কল করবেন তখন সেটি এই নির্দিষ্ট this context এবং arguments ব্যবহার করবে। এটি মূলত JavaScript এর Function.prototype.bind() এর মতো কাজ করে, কিন্তু Lodash এর version আরও সহজ এবং স্থিতিশীল।

Syntax:

_.bind(func, thisArg, [args])
  • func: যেটি function আপনি bind করতে চান।
  • thisArg: যেটি this এর মান হিসাবে ব্যবহার করতে চান (যে object এর সাথে function টি কাজ করবে)।
  • [args]: Optional, একটি array যেগুলি function call এর সময় parameters হিসেবে ব্যবহার হবে।

উদাহরণ:

const _ = require('lodash');

let person = {
  name: 'John',
  greet: function (message) {
    console.log(`${message}, ${this.name}`);
  }
};

// Function কে bind করা
let greetJohn = _.bind(person.greet, person, 'Hello');
greetJohn(); // "Hello, John"

এখানে, _.bind() ব্যবহার করে আমরা greet ফাংশনকে person object এর সাথে bind করেছি এবং যখন greetJohn() কল করা হয়েছে, তখন this এর মান person অবজেক্ট হিসেবে ব্যবহার হয়েছে। আমরা Hello কে arguments হিসেবে pass করেছি।


২. _.bindKey() ফাংশন

_.bindKey() ফাংশনটি মূলত _.bind() এর মতো কাজ করে, তবে এটি একটি object এর property key হিসেবে দেয়া function কে bind করার জন্য ব্যবহৃত হয়। _.bind() ব্যবহার করলে আপনি function কে সরাসরি bind করতে পারেন, কিন্তু _.bindKey() আপনাকে একটি object এর property key দিয়ে function কে bind করার সুযোগ দেয়।

Syntax:

_.bindKey(object, key, [args])
  • object: যে object এ function এর property key রয়েছে।
  • key: যে property key (function) আপনি bind করতে চান।
  • [args]: Optional, function call এর সময় parameters হিসেবে যে arguments গুলি pass করতে চান।

উদাহরণ:

const _ = require('lodash');

let person = {
  name: 'Sarah',
  greet: function (message) {
    console.log(`${message}, ${this.name}`);
  }
};

// Function কে bindKey ব্যবহার করে bind করা
let greetSarah = _.bindKey(person, 'greet', 'Hi');
greetSarah(); // "Hi, Sarah"

এখানে, _.bindKey() ব্যবহার করে আমরা person object এর greet property কে bind করেছি এবং Hi কে arguments হিসেবে pass করেছি। this এর মান person অবজেক্ট হিসেবে ব্যবহৃত হয়েছে।


_.bind() এবং _.bindKey() এর মধ্যে পার্থক্য

বৈশিষ্ট্য_.bind()_.bindKey()
Function Bindingসরাসরি function কে bind করেএকটি object এর property key দিয়ে function কে bind করে
Context Bindingthis context সরাসরি bind করা হয়this context bind করার সাথে সাথে function key এর মাধ্যমে binding করা হয়
Usageসাধারণ function এর জন্যযখন object এ একটি property key দিয়ে function থাকা থাকে

উপসংহার

Lodash এর _.bind() এবং _.bindKey() ফাংশনগুলি function binding এর জন্য অত্যন্ত কার্যকরী টুল। _.bind() সাধারণত function এর context এবং parameters নির্ধারণ করতে ব্যবহৃত হয়, আর _.bindKey() object এর property key ব্যবহার করে function কে bind করতে সহায়তা করে। এই ফাংশনগুলি JavaScript কোডের স্থিতিশীলতা এবং কার্যকারিতা বাড়ায়, বিশেষ করে যখন আপনি function এর context (this) নিয়ন্ত্রণ করতে চান।

Content added By
Promotion

Are you sure to start over?

Loading...