forEach-এ break নেই — বিকল্প পদ্ধতিগুলো
Array.prototype.forEach() মেথডে break বা continue ব্যবহার করা যায় না। এটি সব ইটেমের ওপর ইটারেট করে এবং মাঝপথে বের হওয়ার কোনো বিল্ট-ইন উপায় নেই (এক্সেপশন থ্রো করার ছাড়া, যা অপরামর্শকর)।
বিকল্প ১: for...of লুপ (ES6+) — প্রস্তাবিত
সাধারণ লুপ ব্যবহার করলে break, continue, return সব কাজ করে।
const arr = [1, 2, 3, 4, 5];
for (const item of arr) {
if (item === 3) break; // লুপ থেকে বের হবে
console.log(item); // 1, 2
}
বিকল্প ২: Array.prototype.some() / every()
some(): কলব্যাকtrueরিটার্ন করলে লুপ বন্ধ করে (break-এর মতো)।every(): কলব্যাকfalseরিটার্ন করলে লুপ বন্ধ করে।
// some() ব্যবহার করে প্রথম মিল পাওয়ার সাথে সাথে বন্ধ
const found = arr.some(item => {
if (item === 3) return true; // break
console.log(item);
return false; // চালিয়ে যাও
});
বিকল্প ৩: Array.prototype.find() / findIndex()
শুধু প্রথম মিলে যাওয়া এলিমেন্ট বা ইনডেক্স দরকার হলে এটি সেরা।
const found = arr.find(item => item > 2); // 3 রিটার্ন করবে এবং বন্ধ হবে
const index = arr.findIndex(item => item > 2); // 2 রিটার্ন করবে
বিকল্প ৪: Lodash _.find / _.forEach (লাইব্রেরি)
Lodash-এর _.find এবং _.forEach (লড্যাশ ভার্সন) break সমর্থন করে।
_.find([1,2,3,4], (element) => {
if (element === 2) return true; // break
// প্রসেসিং
});
বিকল্প ৫: এক্সেপশন থ্রো (অপরামর্শকর)
try {
arr.forEach(item => {
if (item === 2) throw new Error('BreakException');
});
} catch (e) {
if (e.message !== 'BreakException') throw e;
}
চেতাবনী: কন্ট্রোল ফ্লোর জন্য এক্সেপশন ব্যবহার করা অ্যান্টি-প্যাটার্ন, পারফরম্যান্স খারাপ এবং ডিবাগিং কঠিন করে।
সারসংক্ষেপ: কোনটি ব্যবহার করবেন?
| পরিস্থিতি | সেরা পদ্ধতি |
|---|---|
| সাধারণ লুপ, break/continue দরকার | for...of |
| শর্ত মেনে প্রথম এলিমেন্ট খুঁজে বের করা | find() / findIndex() |
| শর্ত মেনে প্রথম true চেক করা | some() |
| সব এলিমেন্ট শর্ত মেনে কিনা চেক | every() |
| লড্যাশ ইতিমধ্যে প্রজেক্টে আছে | _.find |
নিচের লাইন: forEach ব্যবহার করুন শুধু তখনই যখন আপনাকে **সব** এলিমেন্ট প্রসেস করতে হয় এবং মাঝপথে বের হতে হবে না। অন্যথায় for...of বা উপযুক্ত অ্যারে মেথড ব্যবহার করুন।