Re: [RFC] Generators

From: Date: Sun, 12 Aug 2012 22:55:23 +0000
Subject: Re: [RFC] Generators
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-62120@lists.php.net to get a copy of this message
On 13 באוג 2012, at 01:33, Levi Morrison <morrison.levi@gmail.com> wrote: > On Sun, Aug 12, 2012 at 2:08 PM, Brian Moon <brian@moonspot.net> wrote: >> Do you have a good example usage other than a file? I don't find fopen/fgets/fclose >> all that complicated. What are the other valid use cases for such a thing? > > One fabulous use case is creating an iterator for a Binary Search > Tree. A post order done without generators looks like: > > https://github.com/morrisonlevi/PHP-Datastructures/blob/master/src/Spl/PostOrderIterator.php. > An iterator using a generator looks something like: > > public function getIterator() { > if ($this->left) yield* $this->left; > yield $this->value; > if ($this->right) yield* $this->right; > } > > This is 5 lines. The fully commented version of the post-order > iterator previously mentioned is 106 lines of code and is considerably > harder to understand. > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > Each Iterator implementation in PHP is longer and require a class. The yield keyword can reduce the code and make things simpler. If my vote count, though I can't believe it is, I'd vote for it - clean syntax, make things simpler to develop after you understand the concept (for those who against adding because of the learning issue and beginners - we'll have beginners anytime that'll mess up with the concept, so I don't think that it should restrict us. Put that aside, we should make the documentation clear and easy as possible in order to help beginners understand the concept).

« previous php.internals (#62120) next »