DEV Community

Cover image for Iterator design pattern O'zbek tilida
Ismoil Turdaliyev
Ismoil Turdaliyev

Posted on

Iterator design pattern O'zbek tilida

Iterator design pattern

🎯

Iterator design pattern - bu kollektsiyadagi obyektlar (masalan, massivlar, ro'yxatlar, daraxtlar) ustida birma-bir yurish (iteratsiya qilish) uchun ishlatiladi. Bu pattern yordamida kollektsiyaning ichki tuzilishini bilmasdan, uning elementlariga kirish mumkin.

Masalan, sizda katta kitoblar ro'yxati bor va har bir kitobni birma-bir ko'rib chiqmoqchisiz. Iterator pattern sizga shu jarayonni osonlashtiradi!
Qismlar:
Iterable interfeysi: Kollektsiya ichida yurish uchun iteratorni qaytaradi.
Iterator interfeysi: Kollektsiya ustida yurish uchun next(), hasNext() kabi metodlarni ta'minlaydi.
Konkret kollektsiya: Bu kollektsiya yoki to'plam bo'lib, unda iteratorni yaratish lozim.
Konkret iterator: Kollektsiya elementlarida yurishni ta'minlaydi.

// 1. Iteratorni yaratadigan funksiya
function createIterator<T>(items: T[]) {
  let index = 0; // Iterator ichki holati (closure ichida yashiringan)

  return {
    next: (): T | null => {
      if (index < items.length) {
        return items[index++];
      }
      return null;
    },
    hasNext: (): boolean => index < items.length,
  };
}

// 2. Foydalanish
const books = [
  { title: "O'tgan kunlar" },
  { title: "Mehrobdan Chayon" },
  { title: "Ikki eshik orasi" },
];

const bookIterator = createIterator(books);

while (bookIterator.hasNext()) {
  const book = bookIterator.next();
  console.log(book?.title);
}
Enter fullscreen mode Exit fullscreen mode

Javob:

O'tgan kunlar
Mehrobdan Chayon
Ikki eshik orasi

Yanam yaxshiroq:

// 1. Filtrlash imkoniyatiga ega iteratorni yaratadigan funksiya
function createFilteredIterator<T>(items: T[], filterFn: (item: T) => boolean) {
  let index = 0;

  return {
    next: (): T | null => {
      while (index < items.length) {
        const item = items[index++];
        if (filterFn(item)) {
          return item;
        }
      }
      return null;
    },
    hasNext: (): boolean => {
      for (let i = index; i < items.length; i++) {
        if (filterFn(items[i])) {
          return true;
        }
      }
      return false;
    },
  };
}

// 2. Foydalanish
const users = [
  { name: "Ali", isActive: true },
  { name: "Vali", isActive: false },
  { name: "Salim", isActive: true },
  { name: "Dilnoza", isActive: false },
];

// Aktiv foydalanuvchilarni iteratsiya qilish uchun iterator yaratamiz
const activeUserIterator = createFilteredIterator(users, (user) => user.isActive);

while (activeUserIterator.hasNext()) {
  const user = activeUserIterator.next();
  console.log(user?.name);
}
Enter fullscreen mode Exit fullscreen mode

Javobi:
Ali
Salim

🎞 https://youtu.be/PAmrBOrXLAE

DESIGN_PATTERN #ITERATOR

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay