Yield – Leniwe kolekcje

Yield

Instrukcja Yield wykorzystywana jest do tworzenia kolekcji, gdzie kolejne elementy kolekcji są tworzone w momencie ich wykorzystania. Umożliwia to zaoszczędzenie pamięci oraz przyśpieszenie działania aplikacji. Jeśli chcemy wygenerować obiekty naszej listy możemy wykorzystać instrukcję yield return:

Metoda generująca nasze elementy zostanie wykonana dopiero w momencie odczytu elementu poprzez enumerator. Odczytem jest każda operacja, która pobiera wartość, i tak dla :

w wyniku otrzymamy

a gdy tylko będziemy chcieli odwrócić kolejność elementów przy pomocy reverse

otrzymamy

Jeśli chcemy zakończyć kolekcję w dowolnym momencie możemy wykorzystać yield break.

Zastosowanie

Leniwe kolekcje mogą być wykorzystane wszędzie tam, gdzie wykorzystujemy normalny IEnumerable, jednakże swoją potęgę pokazują, kiedy mamy do czynienia z dużymi zbiorami danych. Jeśli zbiór danych znajduje się na dysku w postaci pliku możemy odczytywać jego zawartość sekwencyjnie i zwracać dane w mniejszych partiach. Przy odczycie i zwróceniu od razu całej kolekcji w postaci listy, pełen zbiór danych musiałby zostać odczytany i przechowany w pamięci aplikacji.

Innym przypadkiem użycia może być trudna generacja danych dla kolekcji. Jeśli generacja takich danych jest trudna nie potrzebujemy od razu znać pełnej kolekcji, niekiedy potrzebujemy tylko kilka pierwszych wartości. Przy zastosowaniu listy musielibyśmy obliczyć od razu wszystkie elementy, a z wykorzystaniem yield elementy są obliczane wraz z postępem przetwarzania naszej kolekcji.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *