@kotlin_lang

Страница 519 из 982
Жабра
30.01.2018
15:20:48


Andrew
30.01.2018
15:26:24
а) пометить саму loadUsers как suspend б) превратить Deferred, который возвращается async`-ом, в Guava `ListenableFuture / Java 8 CompletableFuture с помощью соотсветствующей зависимости из kotlinx.coroutines.

Жабра
30.01.2018
15:27:34
Спасибо, но не совсем понял, зачем нужно б)

Andrew
30.01.2018
15:27:55
ой, а зачем вы users присваиваете из async? Верните лучше её как результат блока и напишите val users = job.await()

Google
Andrew
30.01.2018
15:28:26
Спасибо, но не совсем понял, зачем нужно б)
На случай, если нужен интероп с джавкой / не весь котлин-код переводится на корутины одним махом

Andrew
30.01.2018
15:30:20
Не получится, к сожалению, сам бы хотел
А почему? У меня вроде получалось :)

Badya
30.01.2018
15:31:15
Читайте документацию коллега)

Жабра
30.01.2018
15:31:37
Пишет, что возвращается Any, скорее всего из-за try catch. Так, а стоп... Если я помечу loadingUsers как suspend, мне придётся везде оборачивать её вызов в корутину.

Badya
30.01.2018
15:32:08
На данный момент корутина выглядит бессмысленно в этом методе так как встанете на ожидание в месте вызова await()

Andrew
30.01.2018
15:32:15
Воооот, оттуда и взялся пункт б ;)

Жабра
30.01.2018
15:33:00
На данный момент корутина выглядит бессмысленно в этом методе так как встанете на ожидание в месте вызова await()
Не сказал бы. Потому что запрос идёт по сети, а такие запросы нельзя делать в ui потоке

Andrew
30.01.2018
15:33:55
Последнее выражение является implicit return, что runOnUiThread возвращает?

Google
Andrew
30.01.2018
15:35:01
Я бы, пожалуй, не заворачивал тело async в try / catch, а завернул в него .await()

Badya
30.01.2018
15:35:31
await() заблочит ваш текущий тред (скорее всего это UI)

Andrew
30.01.2018
15:35:56
await -- это саспенд-функция, она не блочит по определению.

Quantum Harmonizer
30.01.2018
15:35:57
Badya
30.01.2018
15:36:12
Вот тот что на скрине)

Andrew
30.01.2018
15:36:45
Вот он и не блочит. Он только саспендит и только в корутине.

Советую покурить документацию, ссылки на которую висят в README.md в kotlinx.coroutines.

Badya
30.01.2018
15:40:48
Вам либо сделать саспенд функцию придется, либо прям тут вставлять runBlocking

Ну или launch(UI)

Жабра
30.01.2018
15:42:01
Второй вариант, насколько я понимаю, остановит ui поток

Badya
30.01.2018
15:42:15
Не остановит, а заблокирует)

Жабра
30.01.2018
15:42:24
Ну да, я об этом.

Badya
30.01.2018
15:42:33
Сорян - я бэкендер)

Andrew
30.01.2018
15:54:19
Дык а есть у вас Guava в проекте? Или хотя бы streamsupport-cfuture?

В общем, начните плясать от того, что можно написать val users: ListenableFuture<ArrayList<User>> = async(CommonPool) { ServerHandler.selectUserList(last, size) }.asListenableFuture Дальше вопрос только в том, что ещё вы уносите вовнутрь корутины, а что оставляете на фьючерах.

Roman
30.01.2018
16:37:52
Еще просьба не постить код скриншотом, совершенно нет желания писать все это чтобы показать что нужно написать чтобы код заработал. Лучше пользоваться сервисом https://gist.github.com/

Жабра
30.01.2018
16:39:53
Еще просьба не постить код скриншотом, совершенно нет желания писать все это чтобы показать что нужно написать чтобы код заработал. Лучше пользоваться сервисом https://gist.github.com/
Окей, и я знаю что такое гист, спасибо, но вопрос был более теоретический и не подразумевал того, что будут скидывать реальные примеры.

Roman
30.01.2018
16:43:09
Ну теоретически код написан не правильно и его проще поправить, чем рассказывать пол часа что да как.

Andrew
30.01.2018
16:48:36
Я попробовал поправить, но не смог, ибо после десктопного runBlocking не смог ментально смигрировать на launch(UI).

Google
Andrew
30.01.2018
16:48:40
Но да, код полезно пастить текстом.

Виталий
30.01.2018
17:03:01
подскажите как загнать в двумерный масиы null, но в дальнейшем там будут и null и Tile() val table: Array<Array<Tile?» = Array(fieldRows, { Array(fieldColumns, { null }) })

found: Array<Array<Nothing?»

Roman
30.01.2018
17:06:07
Тип определен верно. В чем проблема?

создать массив из nullable можно функцией arrayOfNulls<Tile>(n)

Виталий
30.01.2018
17:07:35


спасибо)

жесть какая трехмерный массив val level: Array<Array<Array<Tile?>>> = Array(LAYERS_IN_FIELD, { Array(fieldRows, { arrayOfNulls<Tile>(fieldColumns) }) })

Badya
30.01.2018
17:35:44
Уже игры на котлине пишут я смотрю)

Alex
30.01.2018
17:38:45
Уже игры на котлине пишут я смотрю)
+, браузерную с котлином на бэке.

Bogdan
30.01.2018
17:39:37
Уже игры на котлине пишут я смотрю)
ну котлин натив может много обещать, но только пока бибилиотеками c

Bogdan
30.01.2018
17:40:47
чем плохо ?
код мене читабелен

Виталий
30.01.2018
17:41:09
Bogdan
30.01.2018
17:41:23
да и если такой масив мудет велик может много памяти скушать

двемерный масив можно перефразировать как - масив масиве

Виталий
30.01.2018
17:41:57
Bogdan
30.01.2018
17:42:18
300 объектов большинство из которых null
но память под сылки то выделяется

Google
Bogdan
30.01.2018
17:42:30
300*32

чисто за нул??

300*32
а может даже 300*64

тоесть ты получаешь оверхед там где его можно избежать

Виталий
30.01.2018
17:44:07
десяток киобайт на ссылки... мы ж не на спектруме прогаем )

Bogdan
30.01.2018
17:45:54
десяток киобайт на ссылки... мы ж не на спектруме прогаем )
ну я так, + 3х мерный масив, пример из двух мерного, есть разница между 3х7 и 7х3

Badya
30.01.2018
17:46:15
чем плохо ?
Обрабатывать алгоритмом со сложностью O(n^3)..

Bogdan
30.01.2018
17:46:25
а у тебя еще третий параметер параметер появляется

нада матан подтянуть

Like
30.01.2018
17:47:23
матан? ?

Bogdan
30.01.2018
17:47:41
связаный список в итоге может быть быстрей, хотя тут хз

Виталий
30.01.2018
17:47:45
обрабатываться будет только 2мерные массивы

Bogdan
30.01.2018
17:48:06
матан? ?
да вычислять сложность алгоритмов, там матан, и логарифмы замешаны

обрабатываться будет только 2мерные массивы
ну зачем теме третий уровень? Он все равно даст нагрузку (оверхед), в играх может быть существено

зачем сразу писать говнокод?

Виталий
30.01.2018
17:49:10
Bogdan
30.01.2018
17:49:25
можно ввести ManagerLayers

+- простой класс, с похожими алгоритмами что уже придуманы

Виталий
30.01.2018
17:50:15
можно ввести ManagerLayers
можно, но это будет уже где то рядом - а так все в одной куче

Google
Bogdan
30.01.2018
17:50:36
можно, но это будет уже где то рядом - а так все в одной куче
если твой менеджер будет сингелтоном то нет

профит котлина)

Kirill
30.01.2018
17:51:16
Кто вас заставляет обрабатывать трёхмерную структуру алгоритмом O(n^3)?

Badya
30.01.2018
17:51:20
Тебе может быть проще на двумерном массиве хранить в объекте его высоту

Alex
30.01.2018
17:51:34
Кстати, есть за что Котлин покритиковать

Массивы неудобные

Нету дефолтных из джавы

Поэтому я и не пишу раунды на кодфорсе или еще где на Котлине

Bogdan
30.01.2018
17:52:50
кстате, старые дяти из c говорят что любой n-мерынй массив можно переобазовать в n-1-мерный масив

Badya
30.01.2018
17:53:07
Я рад что они многословные - сразу хочется чёт приличней написать) вспоминая list comprehensions...

Bogdan
30.01.2018
17:53:21
Нету дефолтных из джавы
зато более ООП, масив класс, а не что типа этго

люди боле 2-х мерного масива юзать не будут, да и толку нет

Alex
30.01.2018
17:53:55
Но очень редко

А так - шикарный язык

Vladimir
30.01.2018
17:54:15
Массивы неудобные
Есть мнение, что массивы лучше не использовать. Есть же списки.

Bogdan
30.01.2018
17:54:41
Мне иногда такого и не хватает
ну да иногда может быть дискомфорт, особено если пишешь что-то низкоуровневое

Страница 519 из 982