Dasturlash tillari. C# Dasturlash tili haqida


Iteratorlar bu-takrorlovchilar



Download 324 Kb.
bet3/4
Sana06.03.2022
Hajmi324 Kb.
#484355
1   2   3   4

Iteratorlar bu-takrorlovchilar.


Iterator, asosan, qiymatlar to'plami ustida takrorlash uchun rentabellik bayonotidan foydalanadigan kod blokidir. Ushbu kod bloki usul, bayonot tanasini aks ettirishi yoki xususiyatlar blokini olishi mumkin.
Iterator ikkita maxsus yo'riqnomadan foydalanadi:

  • yield return: Qaytarilgan elementni aniqlaydi.

  • yield break: ketma-ketlikning boshqa elementlari yo'qligini bildiradi.

Ushbu misolni ko’rib chiqamiz.

  1. using System;

  2. using System.Collections;


  3. namespace HelloApp

  4. {

  5. class Program

  6. {

  7. static void Main(string[] args)

  8. {

  9. Numbers numbers = new Numbers();

  10. foreach (int n in numbers)

  11. {

  12. Console.WriteLine(n);

  13. }

  14. Console.ReadKey();

  15. }

  16. }


  17. class Numbers

  18. {

  19. public IEnumerator GetEnumerator()

  20. {

  21. for(int i = 0; i < 6; i++)

  22. {

  23. yield return i * i;

  24. }

  25. }

  26. }

  27. }

Numbers sinfida GetEnumerator () usuli aslida iteratorni ifodalaydi. Qaytish rentabelligi ba'zi bir qiymatlarni qaytaradi (bu holda, raqamning kvadrati).


Dasturda foreach loopi yordamida biz Numbers ob'ekti ustida oddiy to'plam kabi takrorlashimiz mumkin. Har bir element foreach ko'chadan olinganida, rentabellikni qaytarish bayonoti ishga tushiriladi, bu bitta elementni qaytaradi va joriy holatni eslab qoladi.
Yana bir misol: aytaylik, bizda kitoblar ombori - Kitob ob'ektlarini aks ettiruvchi kutubxona to'plami mavjud. Ushbu to'plam bo'yicha takrorlash uchun rentabellik bayonotidan foydalanamiz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2

class Book
{
public Book(string name)
{
this.Name = name;
}
public string Name { get; set; }
}
class Library
{
private Book[] books;
public Library()
{
books = new Book[] { new Book("Ottsы i deti"), new Book("Voyna i mir"),
new Book("Yevgeniy Onegin") };
}
public int Length
{
get { return books.Length; }
}
public IEnumerator GetEnumerator()
{
for (int i = 0; i < books.Length; i++)
{
yield return books[i];
}
}
}

GetEnumerator () usuli iteratorni anglatadi. Oldingi tsikldagi kutubxona ob'ekti ustida takrorlanganda rentabellikni qaytaruvchi kitoblar deb nomlaymiz [i];. Hosildorlikni qaytarish to'g'risidagi bayonotga kirishda joriy joy saqlanib qoladi. Va foreach usuli yangi iteratsiyani olish uchun keyingi iteratsiyaga o'tsa, iterator o'sha joydan bajarishni boshlaydi.
Xo'sh, oldingi tsikldagi asosiy dasturda iteratorni amalga oshirish tufayli haqiqiy sanoq amalga oshiriladi:

1
2
3
4

foreach (Book b in library)
{
Console.WriteLine(b.Name);
}

GetEnumerator () usulida iteratorni amalga oshirishda for for loopidagi massiv ustida takrorlanayotgan bo'lsa ham, buni qilish shart emas. Biz rentabellik ko'rsatkichi bo'yicha bir nechta qo'ng'iroqlarni aniqlay olamiz:

1
2
3
4
5
6

IEnumerator IEnumerable.GetEnumerator()
{
yield return books[0];
yield return books[1];
yield return books[2];
}

Bunday holda, har safar rentabellikni qaytarish to'g'risidagi bayonot chaqirilganda, iterator ham joriy manzilni eslab qoladi va keyingi qo'ng'iroqlarda u yerdan boshlanadi.


Download 324 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish