নাম ব্যতীত কার্যাবলী
সোজা কথায় বলতে গেলে ল্যাম্বডা হ'ল একটি নাম বা কোনও বেনামে ফাংশন। এক্সিকিউটেবল কোডের একটি ছোট টুকরো, এটি এমনভাবে পাস করা যায় যেন এটি ভেরিয়েবল। জাভাস্ক্রিপ্টে:
function () {};
আসুন এখন এই ল্যাম্বডাসের কিছু ব্যবহার দেখুন।
বয়লারপ্লেট কোড বিমূর্ত করা হচ্ছে
ল্যাম্বডাস বয়লারপ্লেট কোড দূরে বিমূর্ত করতে ব্যবহৃত হতে পারে। উদাহরণস্বরূপ লুপস। আমরা লিখতে অভ্যস্ত for
এবং while
সারা দিন লুপ। তবে এটি এমন কোড যা লিখিত হয় না। আমরা লুপের ভিতরে কোডটি বের করতে পারি, লুপটির সবচেয়ে গুরুত্বপূর্ণ অংশটি এবং বাকী অংশটি বিমূর্ত করতে পারি:
for (var i=0; i<array.length; i++) {
}
forEach
অ্যারে অবজেক্টের ব্যবহার করে , হয়ে যায়:
array.forEach(function (element, index) {
});
উপরের বিমূর্ততাটি সে কার্যকর নাও হতে পারে তবে অন্যান্য উচ্চতর অর্ডার ফাংশনগুলিও রয়েছে, যেমন forEach
আরও অনেক দরকারী কার্য সম্পাদন করে। উদাহরণস্বরূপ filter
:
var numbers = [1, 2, 3, 4];
var even = [];
for (var i=0; i<numbers.length; i++) {
if (numbers[i] % 2 === 0) {
even.push(numbers[i]);
}
}
alert(even);
even = [1, 2, 3, 4].filter(function (number) {
return number % 2 === 0;
});
alert(even);
কোড কার্যকর করার বিলম্ব
কিছু পরিবেশে, যেখানে ইভেন্টের ধারণা পাওয়া যায়, আমরা লাম্বডাস ব্যবহার করতে পারি এমন ঘটনাগুলির প্রতিক্রিয়া জানাতে যে সময়ে সময়ে ঘটতে পারে।
window.onload = function () {
alert("Loaded");
};
window.setTimeout(function () {
alert("Code executed after 2 seconds.");
}, 2000);
এটি অন্য কিছু উপায়ে করা যেতে পারে, তবে সেগুলি বরং ভার্জোজ। উদাহরণস্বরূপ, জাভাতে Runnable
ইন্টারফেস রয়েছে।
ফাংশন কারখানা
এই অবধি, আমরা কেবল বেশিরভাগ ক্ষেত্রে এর সিনট্যাকটিক চিনির ক্ষমতার জন্য ল্যাম্বডাস ব্যবহার করি। তবে এমন পরিস্থিতি রয়েছে যেখানে ল্যাম্বডাস আরও বেশি কার্যকর হতে পারে। উদাহরণস্বরূপ আমাদের ফাংশন থাকতে পারে যা ল্যাম্বডাস ফিরিয়ে দেয়। ধরা যাক আমাদের একটি ফাংশন আছে যা আমরা চাই এর এর মানগুলি ক্যাশে করা হোক।
var users = [];
var getUser = function (name) {
if (! users[name]) {
users[name] = user_from_ajax;
}
return users[name];
};
পরে, আমরা লক্ষ্য করতে পারি যে আমাদের একই ধরণের কার্যকারিতা রয়েছে:
var photos = [];
var getPhoto = function (name) {
if (! photo[name]) {
photos[name] = photo_from_ajax;
}
return photos[name];
};
সেখানে একটি স্পষ্টভাবে একটি প্যাটার্ন রয়েছে, সুতরাং আসুন এটি বিমূর্ত করা দূরে। মেমোয়েজেশন ব্যবহার করা যাক ।
var memoize = function (store, lambda) {
return function (name) {
if (! store[name]) {
store[name] = lambda(name);
}
return store[name];
};
};
var getUsers = memoize([], function (name) {
});
var getPhotos = memoize([], function (name) {
});
যেমন আপনি দেখতে পাচ্ছেন, ল্যাম্বডাস ব্যবহার করে আমরা ক্যাচিং / স্মৃতি যুক্তিটি বিমূর্ত করতে সক্ষম হয়েছি। যদি অন্য উদাহরণের জন্য কিছু কর্মক্ষেত্র ছিল, আমি বিশ্বাস করি যে এই বিশেষ সমস্যাটি অন্যান্য কৌশল ব্যবহার করে খুব কমই সমাধান করা হয়েছে। আমরা কয়েকটি গুরুত্বপূর্ণ বয়লারপ্লেট কোড একক জায়গায় বের করতে পেরেছি। উল্লেখ করবেন না যে আমরা পরিত্রাণ users
এবং photos
গ্লোবাল ভেরিয়েবল।
আপনার প্রোফাইলটি দেখে আমি দেখতে পাচ্ছি আপনি বেশিরভাগই পাইথন ব্যবহারকারী। উপরের প্যাটার্নের জন্য পাইথনের সজ্জকারের ধারণা রয়েছে। মেমোয়েজেশন সজ্জকারদের জন্য নেটে প্রচুর উদাহরণ রয়েছে । মাত্র তফাত হল যে পাইথন আপনি সম্ভবত আছে নামে যে প্রসাধক ফাংশন ভিতরে নেস্টেড ফাংশন। পাইথন কেবলমাত্র একক-এক্সপ্রেশন ল্যাম্বডাসকে সমর্থন করে। তবে ধারণাটি একই রকম।
পাইথন ল্যাম্বডা ব্যবহারের উদাহরণ হিসাবে। উপরের কোডে যেখানে আমরা এমনকি সংখ্যার ফিল্টার করেছি পাইথনে এটির মতো উপস্থাপন করা যেতে পারে:
filter(lambda x: x % 2 == 0, [1, 2, 3, 4])
যাইহোক, ল্যাম্বডাস ক্লোজার ছাড়া শক্তিশালী নয়। ল্যাম্বডাসের ধারণাকে এত শক্তিশালী করে তো বন্ধগুলি। আমার স্মৃতিচারণের উদাহরণে আমি পরমকে ঘিরে একটি ক্লোজার তৈরি করতে ক্লোজার ব্যবহার করেছি store
। এই পদ্ধতিতে, memoize
ফাংশনটির ফলাফল (একটি ল্যাম্বদা) ফিরে আসার পরেও আমার সেই পরমটিতে অ্যাক্সেস রয়েছে।