Size: a a a

Kotlin Community

2020 August 17

LS

Lev Shagalov in Kotlin Community
buildList неудобно в этом случае - он экспериментальный. Хочу оператором, он тут в тему
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
buildList неудобно в этом случае - он экспериментальный. Хочу оператором, он тут в тему
Оператор нарушает контракт умножение, но как хочешь. Можешь вместо buildList сделать ArrayList(size*count).apply{...}. Это абсолютно то же самое
источник

AL

Alexander Levin in Kotlin Community
Lev Shagalov
buildList неудобно в этом случае - он экспериментальный. Хочу оператором, он тут в тему
Лучше всё-таки консистентно с тем, что есть. Например в строках уже есть функция repeat, я бы предложил также назвать.

listOf(1, 2, 3).repeat(4)
источник

BP

Bogdan Panchenko in Kotlin Community
Lev Shagalov
operator fun List<Item>.times(count: Int) = this + this + this + this
Это для count == 4. А как красиво сделать для любого числа?
Деления нужно перепроверить List(count * size) { get(i/count) }
источник

PE

Pavel Erokhin in Kotlin Community
Кстати, я вот в сорцах в котлин стд либы в скоп функциях видел контракты

Я не совсем понял зачем они вообще нужны и что меняется, если убрать контракт все так же будет рабоатть?
Просто мысль эта не дает покоя, ведь однозначно что-то меняется при применении их

Если можно, то примерчик когда они помогут :)
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Levin
Лучше всё-таки консистентно с тем, что есть. Например в строках уже есть функция repeat, я бы предложил также назвать.

listOf(1, 2, 3).repeat(4)
+
источник

AL

Alexander Levin in Kotlin Community
Lev Shagalov
buildList неудобно в этом случае - он экспериментальный. Хочу оператором, он тут в тему
Ну и он скорее не в тему, listOf(1, 2) * 4 не совсем понятно, что вернёт ( listOf(1, 2, 1, 2, 1, 2, 1, 2) или listOf(4, 8) )
источник

BP

Bogdan Panchenko in Kotlin Community
Pavel Erokhin
Кстати, я вот в сорцах в котлин стд либы в скоп функциях видел контракты

Я не совсем понял зачем они вообще нужны и что меняется, если убрать контракт все так же будет рабоатть?
Просто мысль эта не дает покоя, ведь однозначно что-то меняется при применении их

Если можно, то примерчик когда они помогут :)
Что бы смарт-карты работали, типа NotNull. Также присвоения проперти в лямбда которая один раз выполнится


val i: Int
lamba {i = 1}
источник

LS

Lev Shagalov in Kotlin Community
Item - это предмет в игре. Например железо или цемент.
Если для чего то надо 1 железо и 1 цемент будет Железо + цемент
А если надо несколько таких штук - умножаем на N.
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Item - это предмет в игре. Например железо или цемент.
Если для чего то надо 1 железо и 1 цемент будет Железо + цемент
А если надо несколько таких штук - умножаем на N.
Это опасный путь.  В игре нормально, но в либе рано или поздно приведет к граблям
источник

PE

Pavel Erokhin in Kotlin Community
Bogdan Panchenko
Что бы смарт-карты работали, типа NotNull. Также присвоения проперти в лямбда которая один раз выполнится


val i: Int
lamba {i = 1}
Спасибо, стало более понятнее их предназначение
источник

LS

Lev Shagalov in Kotlin Community
Alexander Nozik
Это опасный путь.  В игре нормально, но в либе рано или поздно приведет к граблям
Да какой либе... узбагойся. Я запарился считать сколько предметов надо для постройки. Это прикладной скрипт.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
например fun List<Item>.times(count: Int) = buildList{repeat(count){addAll(this@times)}. но я очень не рекомендую делать это оператором.
хм, а почему же ?
вполне предсказуемое поведение
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
хм, а почему же ?
вполне предсказуемое поведение
Потому что нарушается контракт умножения. Вы еще на грабли с iterable.plus  не наступали?
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Да какой либе... узбагойся. Я запарился считать сколько предметов надо для постройки. Это прикладной скрипт.
Я бы инфиксом сделал.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
Потому что нарушается контракт умножения. Вы еще на грабли с iterable.plus  не наступали?
нет, можно поподробнее ?
источник

LS

Lev Shagalov in Kotlin Community
Alexander Nozik
Я бы инфиксом сделал.
Это как?
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
нет, можно поподробнее ?
Вот предположим у вас вектор - итерабль. А теперь складываем два вектора, что будет?
источник

LS

Lev Shagalov in Kotlin Community
Вот еще вариант:
operator fun List<Item>.times(count: Int) = (1..count).flatMap { this }
Правда на 0 нельзя умножить
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Это как?
list repeat 3
источник