= Yield = The '''yield''' keyword signals to the compiler that the method in which it appears is an iterator block. [[BR]] A new class is created and compiled to implement the behavior that is expressed in the iterator block (implementing an IEnumerable). Within the iterator block, the yield keyword is used to provide a value to the enumerator object.[[BR]] This is the value that is returned, for example, in each loop of a for statement. In a '''yield''' statement, the expression is evaluated and returned as a value to the enumerator object; expression has to be implicitly convertible to the yield type of the iterator. In a '''yield break''' statement, control is unconditionally returned to the caller of the iterator and signals the end of iteration. The yield statement can only appear inside an iterator block, which can be implemented as the body of a method, operator, or accessor. * A '''yield''' statement cannot be located anywhere inside a try-catch block. It can be located in a try block if the try block is followed by a finally block. * A '''yield break''' statement may be located in a try block or a catch block but not a finally block. == Grammar == {{{ yield [EXPRESSION] yield break }}} == Example == {{{ #!cobra use System.Collections class Pwr def power(num as int, exponent as int) as IEnumerable is shared counter = 0 result = 1 while counter < exponent counter += 1 result = result * num yield result yield break def main is shared # Display powers of 2 up to the exponent 8: for i in .power(2, 8) print i /# Output: 2 4 8 16 32 64 128 256 #/ }}}