Size: a a a

Kotlin Community

2019 December 01

n

neikist in Kotlin Community
Alexander Nozik
но это вопрос эстетики
Ну как сказать эстетики, оно же еще и запараллелится
источник

AN

Alexander Nozik in Kotlin Community
neikist
Ну как сказать эстетики, оно же еще и запараллелится
А это уже вопрос логики. И методом можно launch(::one); launch(::two).... Но параллелисть очистку кэшей и закрытия - это не совсем хорошо.
источник

N

Nick in Kotlin Community
Alexander Nozik
А это уже вопрос логики. И методом можно launch(::one); launch(::two).... Но параллелисть очистку кэшей и закрытия - это не совсем хорошо.
почему не хорошо?
источник

AN

Alexander Nozik in Kotlin Community
Nick
почему не хорошо?
Если там есть некоторая логическая полседовательность, то что-то может поломаться. Если нет - то нормально, конечно.
источник

N

Nick in Kotlin Community
Alexander Nozik
Если там есть некоторая логическая полседовательность, то что-то может поломаться. Если нет - то нормально, конечно.
а, в этом случае да, но там обычный ведроид, ничего сверхсложного
источник

I

Ilmir in Kotlin Community
Nick
у меня был кейс когда надо было 10 суспенд методов запустить внутри 1 скоупа и joinAll()
оказалось вполне удобно через
arrayOf(
::one,
::two
)
.map {
  launch { it() }
}
.joinAll()
coroutineScope {
 launch { one() }
 launch { two() }
}
Structured concurrency же.
источник

N

Nick in Kotlin Community
Ilmir
coroutineScope {
 launch { one() }
 launch { two() }
}
Structured concurrency же.
там какая-то еще доплогика была, не помню уже зачем, но coroutineScope не подошло, надо было дождаться, еще что-то сделать, почему-то не хотели делить на методы и тд
источник

N

Nick in Kotlin Community
но даже так, запустить 30 функций так, ну такое
источник

N

Nick in Kotlin Community
coroutineScope {
  arrayOf(
    ::one,
    ::two,
    ...
    ::ten
  ).forEach(::launch)
}
источник

N

Nick in Kotlin Community
хотя да, лучше явно launch каждого, код проще, читаемее, нет лишнего эррея, а то в стиле "глядите, как умею"
источник

N

Nick in Kotlin Community
мб переделаю как-то
источник

QH

Quantum Harmonizer in Kotlin Community
Коллеги, прошу кодревью.
Я написал трансформацию для стрима токенов (можно представить его как итератор по джейсону), который превращает [[k, v], [k, v]] или [{x: k, y: v}, {x: k, y: v}] в {k: v, k: v}.
Получился совершенно конченый автомат, который более-менее работает только благодаря обилию тестов. Как вообще писать такие pull-style штуки и не убивать на это весь день и недельный запас чая? Всего я написал три трансформации, в планах четвёртая, но этот код мне уже начинает сниться.
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
Коллеги, прошу кодревью.
Я написал трансформацию для стрима токенов (можно представить его как итератор по джейсону), который превращает [[k, v], [k, v]] или [{x: k, y: v}, {x: k, y: v}] в {k: v, k: v}.
Получился совершенно конченый автомат, который более-менее работает только благодаря обилию тестов. Как вообще писать такие pull-style штуки и не убивать на это весь день и недельный запас чая? Всего я написал три трансформации, в планах четвёртая, но этот код мне уже начинает сниться.
Ну например взять корутины, и пусть стейт-машину генерит компилятор. А в коде будет нормальный алгоритм с вызовами nextToken().
И magic numbers (что такое -4?) - это не очень.
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Ну например взять корутины, и пусть стейт-машину генерит компилятор. А в коде будет нормальный алгоритм с вызовами nextToken().
И magic numbers (что такое -4?) - это не очень.
Ага, у меня там есть свой generate-yield, но я боюсь, что при применении множества трансформаций выйдет не особо эффективно.
magic numbers там откомментированы, тупо лень было заводить константы/энамы.
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
Ага, у меня там есть свой generate-yield, но я боюсь, что при применении множества трансформаций выйдет не особо эффективно.
magic numbers там откомментированы, тупо лень было заводить константы/энамы.
Ну мне кажется, это тот самый случай, когда константы завести всё-таки нужно. А в идеале enum конечно, но я понимаю, что там это может получиться не очень эффективным.
источник

I

Ilmir in Kotlin Community
Quantum Harmonizer
Коллеги, прошу кодревью.
Я написал трансформацию для стрима токенов (можно представить его как итератор по джейсону), который превращает [[k, v], [k, v]] или [{x: k, y: v}, {x: k, y: v}] в {k: v, k: v}.
Получился совершенно конченый автомат, который более-менее работает только благодаря обилию тестов. Как вообще писать такие pull-style штуки и не убивать на это весь день и недельный запас чая? Всего я написал три трансформации, в планах четвёртая, но этот код мне уже начинает сниться.
А теперь представьте, что у вас работа состоит в поиске причины неправильной стейт-машины в случае пересечения 4-5 по идее ортогональных, но на деле не очень, фич.
источник

AN

Alexander Nozik in Kotlin Community
Quantum Harmonizer
Коллеги, прошу кодревью.
Я написал трансформацию для стрима токенов (можно представить его как итератор по джейсону), который превращает [[k, v], [k, v]] или [{x: k, y: v}, {x: k, y: v}] в {k: v, k: v}.
Получился совершенно конченый автомат, который более-менее работает только благодаря обилию тестов. Как вообще писать такие pull-style штуки и не убивать на это весь день и недельный запас чая? Всего я написал три трансформации, в планах четвёртая, но этот код мне уже начинает сниться.
Я вот неделю ковырял kotlinx io. Сегодня наконец закончил. Тоже чуть не убился даже без стейт машин. Как только линейность последовательности команд утрачивается, отладка в ад превращается.
источник
2019 December 02

BP

Bogdan Panchenko in Kotlin Community
Quantum Harmonizer
Коллеги, прошу кодревью.
Я написал трансформацию для стрима токенов (можно представить его как итератор по джейсону), который превращает [[k, v], [k, v]] или [{x: k, y: v}, {x: k, y: v}] в {k: v, k: v}.
Получился совершенно конченый автомат, который более-менее работает только благодаря обилию тестов. Как вообще писать такие pull-style штуки и не убивать на это весь день и недельный запас чая? Всего я написал три трансформации, в планах четвёртая, но этот код мне уже начинает сниться.
существуют компиляторы которые генерят кучу мусорного кода, а есть и среди людей такие компиляторы 🌚
источник

QH

Quantum Harmonizer in Kotlin Community
Bogdan Panchenko
существуют компиляторы которые генерят кучу мусорного кода, а есть и среди людей такие компиляторы 🌚
спасибо ❤️
источник

I

Ilmir in Kotlin Community
Quantum Harmonizer
Коллеги, прошу кодревью.
Я написал трансформацию для стрима токенов (можно представить его как итератор по джейсону), который превращает [[k, v], [k, v]] или [{x: k, y: v}, {x: k, y: v}] в {k: v, k: v}.
Получился совершенно конченый автомат, который более-менее работает только благодаря обилию тестов. Как вообще писать такие pull-style штуки и не убивать на это весь день и недельный запас чая? Всего я написал три трансформации, в планах четвёртая, но этот код мне уже начинает сниться.
Как человек, писавший парсеры и лексеры (а также постоянно смотрящий в сгенерированный байткод для корутин), я не нашел в коде чего-нибудь нечитаемого. На мой вгляд вполне читаемо и поддерживаемо.
источник