অ্যারের হাইয়ার-অর্ডার মেথড (Array Higher-Order Methods)
হাইয়ার-অর্ডার মেথড কেন প্রয়োজন? (Why Higher-Order Methods?)
কল্পনা করুন আপনার কাছে ১০০টি লেগো ইটের একটি বাক্স আছে। আপনি চান: সেখান থেকে শুধু লাল রঙের ইটগুলো বেছে নিতে, প্রতিটি ইটকে আগের চেয়ে দ্বিগুণ উঁচু করতে এবং সবশেষে মোট উচ্চতা মাপতে। আপনি চাইলে তিনটি আলাদা for লুপ লিখতে পারেন... বা আপনি হাইয়ার-অর্ডার অ্যারে মেথড (higher-order array methods) ব্যবহার করতে পারেন, যা এই পুরো কাজটিকে একটি পরিচ্ছন্ন ও সহজে পাঠযোগ্য চেইনের মাধ্যমে করে ফেলবে।
এই মেথডগুলো একটি কলব্যাক ফাংশন (callback function)-কে আর্গুমেন্ট হিসেবে গ্রহণ করে — এটি এমন একটি ছোট ফাংশন যা বর্ণনা করে প্রতিটি আইটেমের সাথে কী করতে হবে। মেথডটি স্বয়ংক্রিয়ভাবেই আপনার জন্য লুপ করার কাজটি করে দেয়। আপনার প্রতিনিয়ত যে তিনটি বড় মেথড প্রয়োজন হবে:
.map()— প্রতিটি আইটেমের পরিবর্তন বা ট্রান্সফর্ম করে → ফলাফলের একটি নতুন অ্যারে পান.filter()— মাত্র সেই আইটেমগুলোকেই রাখে যেগুলো শর্ত পূরণ করে → একটি ছোট অ্যারে পান.reduce()— সবগুলো আইটেমকে একটিমাত্র ভ্যালুতে পরিণত করে
Map, Filter এবং Reduce — সবচেয়ে বড় তিনটি অংশ (Map, Filter & Reduce — The Big Three)
খুঁজে বের করা — find, findIndex, some, every (Finding Things — find, findIndex, some, every)
মাঝেমধ্যেই আপনি পুরো একটি অ্যারেকে ট্রান্সফর্ম বা ফিল্টার করতে চান না — আপনি হয়তো কেবল নির্দিষ্ট কিছু একটা খুঁজে পেতে বা অ্যারে সম্পর্কে কোনো প্রশ্ন জিজ্ঞাসা করতে চান।
.find(fn)— প্রথম যে আইটেমটি শর্ত বা টেস্টে উত্তীর্ণ হয়, তাকে রিটার্ন করে (অথবাundefined).findIndex(fn)— প্রথম ম্যাচ বা মিল পাওয়া আইটেমটির ইনডেক্স (index) রিটার্ন করে (অথবা-1).some(fn)— যদি অন্তত একটি আইটেমও পাস বা শর্ত পূরণ করে, তবেtrueরিটার্ন করে.every(fn)— যদি সবগুলো আইটেম পাস বা শর্ত পূরণ করে, তবেtrueরিটার্ন করে.includes(value)— কোনো নির্দিষ্ট ভ্যালু বা মান আছে কি না তা চেক করে (এটিতে কোনো কলব্যাক লাগে না)
Find, Some এবং Every
Sort এবং forEach (Sort & forEach)
.sort() একটি অ্যারেকে সরাসরি বা ইন-প্লেস (in place) সাজিয়ে দেয় (এটি আসল অ্যারেকেই বদলে ফেলে!)। বাই-ডিফল্ট বা স্বয়ংক্রিয়ভাবে, এটি সবকিছুকে স্ট্রিংয়ে পরিণত করে এবং বর্ণানুক্রমিকভাবে সাজায় — যার মানে হলো [10, 2, 1] সাজানো হলে সেটি হয়ে যায় [1, 10, 2]! নম্বর বা সংখ্যাগুলোকে সঠিকভাবে সাজানোর জন্য আপনার একটি কম্পেয়ার ফাংশন (compare function) প্রয়োজন হবে।
.forEach() প্রতিটি আইটেমের জন্য একটি ফাংশন চালনা করে, কিন্তু কিছুই রিটার্ন করে না। এটি অনেকটা for...of লুপের মেথড ভার্সন। এটি তখনই ব্যবহার করবেন যখন আপনার একটি নতুন অ্যারে রিটার্ন করার বদলে কিছু সাইড-ইফেক্টের প্রয়োজন হবে (যেমন ফলাফলটি কনসোলে লগ করা)।
Sort এবং forEach
ছোট কুইজ
পড়া চালিয়ে যান