Re: [RFC] Generators
| From: | Yahav Gindi Bar | 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).