Size: a a a

2021 April 13

DF

Denis F in Modern::Perl
При том, что в жабе тоже можно спокойно жить без has_next :)
источник

c

cono in Modern::Perl
в Rakudo прикольно сделано, там ччтоб не мешать коней с людями, сделали Iterable & Iterator
role Iterable { method iterator }
role Iterator { method pull-one }
всё просто как двери
источник

a

allter in Modern::Perl
Так мы начали как раз с того, что в Java нужен отдельный has_next, т.к. там строгая типизация. Т.е. это особенность реализации паттерна в конкретном ЯП. В Perl для реализации именно паттерна отдельный метод не нужен. А если вам надо написать библиотеку для работы с итераторами, то проще требовать один метод в интерфейсе. а не два.
источник

DF

Denis F in Modern::Perl
Но в java не нужен has_next
источник

a

allter in Modern::Perl
Это немного ортогональная штука.
источник

DF

Denis F in Modern::Perl
Ну если мы говорим про 9+ или 8 с некоторыми оговорками
источник

a

allter in Modern::Perl
Потому что там бросается какое-то особое исключение, если элементы закончились?
источник

DF

Denis F in Modern::Perl
Нет никаких особых исключений, просто стримы умеют сами отлавливать конец коллекции/итератора/стрима
источник

DF

Denis F in Modern::Perl
работать с этим надо будет через стримы и лямбды и все
источник

a

allter in Modern::Perl
Ну, внутри то они всё равно (когда на вход даёшь итератор) либо на эксепшн либо на has_next опираются...
источник

a

allter in Modern::Perl
Стримы это вообще другая тема. Когда GoF писали свою книжку, в Java даже лямбд вроде не было..
источник

DF

Denis F in Modern::Perl
Это уже детали реализации которые программиста волновать не должны.
источник

DF

Denis F in Modern::Perl
Да никакой разницы, просто синтаксис реализации чутка поменяется, но общие принципы не меняются никак
источник

a

allter in Modern::Perl
Принципы не меняются. Но важный момент заключается в том, что Iterator - он для абстрагирования от реализации, а не для декомпозиции. Иначе можно упереться в то, что кто-то захочет работать с твоим "итератором" как с итератором, но упрётся в странные баги, связанные с тем, что в ФП называется "нарушением законов".
источник

DF

Denis F in Modern::Perl
Нет, он упрется в то, что прибегут админы и дадут люлей за вставшую колом базу :)
источник

DF

Denis F in Modern::Perl
А коду будет до лампочки
источник

a

allter in Modern::Perl
Это к итераторам вообще не относится...
источник

R

Roman in Modern::Perl
Никаких законов нет. Есть интерфейс, описанный в документации (если она есть). Интерфейс может быть любым. Менять интерфейс чревато несовместимостью с ранее написанным. Все.
источник

И

Игорь in Modern::Perl
И здесь про python и ruby вспомнили  , а про perl забыли...

upd: и про php тоже вспомнили
источник

И

Игорь in Modern::Perl
В копилку того, что удручает: нет best practices по паттернам с примерами на perl )))
источник