class-id sillyCount.
working-storage section.
01 c binary-long value 1 static.
method-id main static.
01 i binary-long.
procedure division using by value cmds as string occurs any.
*> Use perform to loop over an iterator
perform varying i through self::doCount()
display i
end-perform
end method.
*> Create an iterator by defining a member as an iterator
*> Using iterator-id instead of method-id
iterator-id doCount static.
*> The return value if the iterator is defined using the
*> yielding keyword
procedure division yielding j as binary-long.
perform until false
add 1 to c
move c to j
*> Until the iterator is stopped, it will yield on
*> a goback verb
goback
*> then start again directly after the goback
*> on the next invocation of the iterator
multiply c by 10 giving j
if c less then 50
goback
else
*> Stop iterator - as it says
*> Control goes back to the calling routine.
stop iterator
goback
end-if
end-perform
*> COBOL will implicitly stop iterator at the
*> end of the iterator definition.
*> In this example – the code never gets here.
end iterator.
end class.
|
In Java there is no YIELD feature, so the iterator
implementation has to take care of state.
|