Size: a a a

Kotlin Community

2019 November 24

AL

Alexander Levin in Kotlin Community
Quantum Harmonizer
Что именно «нет»?
Не только в этом различие. Ответ - в обоих случаях различие в контракте, который на типах немного не передать.
В случае Iterable мы не особо запариваемся с понятием немедленных и промежуточных операций. В случае Sequence нам это важно.

Т.е. в теории конечно можно было всё затолкать в Iterable и там было был куча расширений xEager/xLazy. Но можно задать два интерфейса с разной идеей, хоть и совпадающей сигнатурой.
источник

QH

Quantum Harmonizer in Kotlin Community
Alexander Levin
Не только в этом различие. Ответ - в обоих случаях различие в контракте, который на типах немного не передать.
В случае Iterable мы не особо запариваемся с понятием немедленных и промежуточных операций. В случае Sequence нам это важно.

Т.е. в теории конечно можно было всё затолкать в Iterable и там было был куча расширений xEager/xLazy. Но можно задать два интерфейса с разной идеей, хоть и совпадающей сигнатурой.
Ну с итераблами вообще всё странно.
Например, я хотел бы, чтобы List.map возвращал MappedList, где значения в ячейках вычисляются по мере доступа. Потому что лист, который я мапплю, может оказаться ещё не вычисленным.
источник

QH

Quantum Harmonizer in Kotlin Community
А вот для массивов примитивов эта модель отлично подходит :)
источник

КР

Кирилл Романенко in Kotlin Community
Quantum Harmonizer
* в том, что он может оказаться одноразовым (и вместо него нужно просто использовать итератор, который тоже одноразовый, но привычный и уже есть)
* в экстеншенах (их нужно было делать к итератору, но уже поздно)
нет?
Они по-разному обрабатываются. Лист пачкой, секвенс по очереди. Сиквенс хорош в случаях когда тебе надо остановить вычисление в определённом моменте и выйти (можно по старинке через фор/вайл и брейк/ретерн, но мы ведь в котлин пришли не императивщину плодить).
источник

QH

Quantum Harmonizer in Kotlin Community
Кирилл Романенко
Они по-разному обрабатываются. Лист пачкой, секвенс по очереди. Сиквенс хорош в случаях когда тебе надо остановить вычисление в определённом моменте и выйти (можно по старинке через фор/вайл и брейк/ретерн, но мы ведь в котлин пришли не императивщину плодить).
ну так это всё экстеншены, а так внутри сиквенса и итерабла одинаковые итераторы, поэтому экстеншены к сиквенсам нужно переместить на итераторы
источник

QH

Quantum Harmonizer in Kotlin Community
если я оборачиваю итератор, тут уже даже без знания котлина очевидно, что оно ленивое
источник

AL

Alexander Levin in Kotlin Community
Quantum Harmonizer
ну так это всё экстеншены, а так внутри сиквенса и итерабла одинаковые итераторы, поэтому экстеншены к сиквенсам нужно переместить на итераторы
Ну я же выше привёл пример, что точно слово "нужно" лишнее. Я для себя относительно уверен, что я не хотел бы постоянно писать mapLazy/mapEager вместо просто map. А прийти к выводу что лучше так сходу ты не сможешь.
источник
2019 November 25

BP

Bogdan Panchenko in Kotlin Community
Quantum Harmonizer
Ну с итераблами вообще всё странно.
Например, я хотел бы, чтобы List.map возвращал MappedList, где значения в ячейках вычисляются по мере доступа. Потому что лист, который я мапплю, может оказаться ещё не вычисленным.
"потому что лист еще не вычесленым" - бинго это называют последлвательностью. А лист вполне понятная сущность
источник

BV

Boris Vanin in Kotlin Community
Bogdan Panchenko
"потому что лист еще не вычесленым" - бинго это называют последлвательностью. А лист вполне понятная сущность
Не, эти операции вполне могли бы быть отложенным
источник

BV

Boris Vanin in Kotlin Community
Но так проще и инлайн
источник

BP

Bogdan Panchenko in Kotlin Community
Boris Vanin
Не, эти операции вполне могли бы быть отложенным
а когда тебе не нужно отложить?
источник

BV

Boris Vanin in Kotlin Community
Bogdan Panchenko
а когда тебе не нужно отложить?
Ну если я делаю это прямо сейчас, то мне нет смысла тратить на это ресурсы
источник

BP

Bogdan Panchenko in Kotlin Community
а когда нужно используешь сиквенс, специальную абстракцию
источник

AO

Alexey Otts in Kotlin Community
Кирилл Романенко
Они по-разному обрабатываются. Лист пачкой, секвенс по очереди. Сиквенс хорош в случаях когда тебе надо остановить вычисление в определённом моменте и выйти (можно по старинке через фор/вайл и брейк/ретерн, но мы ведь в котлин пришли не императивщину плодить).
И чем это отличается от итератора?
источник

AO

Alexey Otts in Kotlin Community
Я вот лично согласен с Мишей, что это есть по сути одно и тоже
источник

BV

Boris Vanin in Kotlin Community
Alexey Otts
И чем это отличается от итератора?
По сути ничем, кроме переиспользуемости
источник

BV

Boris Vanin in Kotlin Community
Хотя я не могу вспомнить хоть один раз, чтобы я сиквенсы переиспользовал
источник

AN

Alexander Nozik in Kotlin Community
Boris Vanin
Хотя я не могу вспомнить хоть один раз, чтобы я сиквенсы переиспользовал
sequence{}
источник

BV

Boris Vanin in Kotlin Community
Помню, раньше вся логика сиквенсов была в итераторах. Потом это переделали
источник

BV

Boris Vanin in Kotlin Community
Alexander Nozik
sequence{}
Да, с этим не поспоришь
источник