در دنیای برنامهنویسی، JavaScript به عنوان زبانی همهگیر شناخته میشود و یکی از مفاهیم جالب و کاربردی این زبان Iterableها هستند. Iterableها مفهومی در زبان جاوااسکریپت تشکیل میدهند که به ما اجازه میدهند تا از یک مجموعه داده به ترتیبی قابل پیشبینی استفاده کنیم. به زبان ساده، Iterableها دادههایی هستند که میتوانیم روی آنها loop بزنیم یا به اصطلاح iterate کنیم.
برای درک بهتر، تصور کنید Iterableها مانند کتابی هستند که میتوانیم صفحه به صفحه آن را بخوانیم. اگر این کتاب شامل مواردی چون لیست اسامی یک گروه موسیقی راک محبوب باشد، ما میتوانیم با استفاده از یک حلقه for...of به راحتی پسزمینه اعضای اصلی این گروه را مرور کنیم.
در واقع در جاوااسکریپت، ساختارهایی مثل آرایه، Map و Set به طور مستقیم iterable هستند. اما شما میتوانید با تعریف ویژگی [Symbol.iterator] خودتان هم یک شئ را iterable کنید. استفاده از ویژگی [Symbol.iterator] که به شکل سمبل است، کلیدی برای مشخص کردن این است که شئ مورد نظر چگونه باید تکرار شود.
برای نمونه میتوان یک Iterable ساده با ویژگی [Symbol.iterator] تعریف کرد که هر بار مقداری تصادفی تولید کند. به این صورت میتوان یک قابلیت جدید به شئ داد تا بتواند از سازوکار Iterable پیروی کند و خیلی راحت آن را در هر جایی که نیاز داریم استفاده کنیم.
بیایید با هم مثالی از کد را ببینیم که توضیحات بیشتری در مورد این موضوع خواهد داد:
const randomNumbers = {
[Symbol.iterator]() {
return {
next() {
return { value: Math.random(), done: false };
}
};
}
};
for (let number of randomNumbers) {
console.log(number);
if (number > 0.9) break; // پایان حلقه زمانی که مقدار بزرگتر از 0.9 است
}
این قطعه کد مقداری جالب است. بیایید با هم آن را بررسی کنیم:
const randomNumbers = {
این خط یک شئ جدید به نام
randomNumbers
تعریف میکند.[Symbol.iterator]() {
این ویژگی اجازه میدهد شئ
randomNumbers
به عنوان یک iterable عمل کند.return {
تابعی را باز میگرداند که شامل یک متد
next()
است.next() {
متدی که نحوه تکرار شئ را مشخص میکند.
return { value: Math.random(), done: false };
این خط مقداری تصادفی بازمیگرداند و نشان میدهد که تکرار تمام نشده است.
for (let number of randomNumbers) {
شروع یک حلقه
for...of
برای تکرار در مقدارهای randomNumbers
.console.log(number);
در هر مرحله مقدار تصادفی را چاپ میکند.
if (number > 0.9) break;
حلقه را قطع میکند اگر مقدار بیش از
0.9
باشد.