Size: a a a

Kotlin Community

2020 July 15

IK

Igor Komarov in Kotlin Community
Не то, чтобы я настоятельно рекомендовал бы очень сильно  погружаться вам в алгоритмы и структуры данных, но какие-то базовые штуки-дрюки иногда сильно упрощают жизнь. Почитайте Кормена, например :)
источник

ДК

Дима Красилов... in Kotlin Community
Не понял, как мне рингБуффер упрощает жизнь
источник

IK

Igor Komarov in Kotlin Community
Он полностью решает вашу задачу?
источник

AN

Alexander Nozik in Kotlin Community
Дима Красилов
Не понял, как мне рингБуффер упрощает жизнь
Ну по сути то, что вам нужно - это ринг буффер и есть. Другое дело, стоит ли его писать самому. Сделать это хорошо не так просто
источник

ДК

Дима Красилов... in Kotlin Community
Igor Komarov
Он полностью решает вашу задачу?
Ну есть такой принцип "yagni"
источник

IK

Igor Komarov in Kotlin Community
Дима Красилов
Ну есть такой принцип "yagni"
Как хотите. Но список не предназначен для того, что вы хотите с ним делать
источник

ДК

Дима Красилов... in Kotlin Community
Igor Komarov
Как хотите. Но список не предназначен для того, что вы хотите с ним делать
Понимаю. Поэтому и спросил про идиоматичный варик.
Мне нужна структура, которая будет FIFO (буффером) с ограниченным размером.

РингБуффер это какой-то более частный случае, когда за последним элементом снова идет первый.
источник

IK

Igor Komarov in Kotlin Community
Дима Красилов
Понимаю. Поэтому и спросил про идиоматичный варик.
Мне нужна структура, которая будет FIFO (буффером) с ограниченным размером.

РингБуффер это какой-то более частный случае, когда за последним элементом снова идет первый.
Кстати, да:  

«Always implement things when you actually need them, never when you just foresee that you need them»

Вот сейчас придерживаясь этого же принципа – самое время написать рингбуффер, потому что  у вас есть кейс, при котором он подходит для использования. Yagni эт не про костыльное переиспользование того, что есть в проекте, а про то, что вы не задрачиваете бесполезные штуки просто потому что так прикольнее выглядит.
источник

ДК

Дима Красилов... in Kotlin Community
Но в целом да, он мне подходит
источник

ДК

Дима Красилов... in Kotlin Community
Единственное, что мне не подходит это писать собственный класс для этого
источник

IK

Igor Komarov in Kotlin Community
Ладно, сдаюсь🤦‍♂️

Просто для того, чтобы вы знали, List::plus создает новый список. List::drop также создает новый список. При каждой  подобной операции список у вас будет пересоздаваться дважды (sic!)
источник

ДК

Дима Красилов... in Kotlin Community
Спасибо, я знаю.
источник

ДК

Дима Красилов... in Kotlin Community
Придется брать arrow kt
источник

ДК

Дима Красилов... in Kotlin Community
Там же на plus  список  копироваться не будет, правильно?
источник

ДК

Дима Красилов... in Kotlin Community
Создастся новый элемент и реюзнется старый лист, т.к. он иммутабельный
источник

IK

Igor Komarov in Kotlin Community
Дима Красилов
Создастся новый элемент и реюзнется старый лист, т.к. он иммутабельный
Там не труЪ иммутабельные коллекции вроде. По-крайней мере, опять же, раньше было так
источник

ДК

Дима Красилов... in Kotlin Community
Опять же take идиоматичный тоже не копирует лист полностью, вроде бы
источник

IK

Igor Komarov in Kotlin Community
Дима Красилов
Придется брать arrow kt
Вы понимаете что чтобы не писать 15 минут бедный рингбуффер вы сейчас хотите закинуть в проект библиотеку, расширяющую парадигму до функциональной?)
источник

AL

Alexander Levin in Kotlin Community
Дима Красилов
Там же на plus  список  копироваться не будет, правильно?
Будет, там под капотом обычный ArrayList. Но если у вас буквально 5 элементов, то не суть важно. Если нет, то есть отдельная либа с true immutable collections
источник

ДК

Дима Красилов... in Kotlin Community
Igor Komarov
Вы понимаете что чтобы не писать 15 минут бедный рингбуффер вы сейчас хотите закинуть в проект библиотеку, расширяющую парадигму до функциональной?)
Да у меня уже есть arrow kt в проекте
источник