dedlfix: yield return

Beitrag lesen

Tach!

Es ist mir aber noch nicht ganz klar: das, was von der Methode Foo() zurückgegeben wird, beinhaltet auch die zwei Asgaben A und B.

Das was direkt zurückgegeben wird ist sozusagen nur ein Verweis auf die Methode.

Das heißt, dass diese Ausgaben erst dann ausgeführt werden, wenn über das, was zurückgegebn wird, iteriert wird? Welche Rolle spielt nun an dieser Stelle der Generator von yield?

Das yield sagt dem Compiler, dass diese Methode ein Generator ist und nicht sofort ausgeführt werden soll, sondern erst wenn jemand darüber iteriert. Ansonsten würde sie sofort ausgeführt werden und sie hätte eine Liste erstellen müssen, damit der Aufrufer darüber iterieren kann.

Der Vorteil eines Generators ist, dass der Code eben nicht sofort losläuft und damit vielleicht lange und viel Speicher braucht. Stattdessen läuft der Code schrittweise beim Iterieren ab.

Meistens verwendet man das yield nicht nacheinander in Einzelschritten sondern in einer Schleife. Ein Beispiel wäre das Abfragen des Ergebnisses einer Datenbankabfrage. Statt den ganzen großen Batzen erst in eine Liste zu packen, über die man sowieso nur iterieren möchte, rückt ein Generator immer nur ein kleines Stück nach dem anderen raus.

dedlfix.