@kotlin_lang

Страница 532 из 982
Kirill
06.02.2018
15:10:51
Junit 4-5 работает без проблем
если у тебя какие-то хитрые билды и хитрые сетапы в test {}

Руслан
06.02.2018
15:11:21
Нет конечно, дифолт

Sergey
06.02.2018
15:11:55
у меня в 2018.1 обычные перестали запускаться

junit 4

Google
Руслан
06.02.2018
15:13:06
На то он и EAP, что могут фичи отламываться

Quantum Harmonizer
06.02.2018
15:30:19
На то он и EAP, что могут фичи отламываться
Я скорей проверю, что ошибка у меня в ДНК, чем что в идее не работают такие тривиальные вещи.

Sergey
06.02.2018
15:41:43
https://blog.jetbrains.com/kotlin/2018/02/using-gradle-build-cache-with-kotlin/

хз постили или нет

Kirill
06.02.2018
15:51:11
Так вот почему у всех сломалась поддержка грэдла...

Va
06.02.2018
15:55:03


Kirill
06.02.2018
15:55:35
Это градл проект или jps? В любом случае попробуй invalidate caches/restart :)

Alexandr
06.02.2018
16:20:19
Включи поддержку экспериментальных функций в build

Sergey
06.02.2018
16:21:21
не там



тут включал?

Google
Alexandr
06.02.2018
16:22:31
kotlin { experimental { coroutines "enable" }

У меня после этой фичи все норм.

Igor
06.02.2018
16:24:59
kotlin { experimental { coroutines "enable" }
Еще можно сэкономить пару строк)) kotlin.experimental.coroutines "enable”

Va
06.02.2018
16:29:45
перестало показывать предупреждение, точек саспенда все еще нет (

Sergey
06.02.2018
16:31:08
чисть кеш, ребутай идею

Kira
06.02.2018
16:40:19
И переходи gradle kotlin dsl ?

Виталий
06.02.2018
17:24:49
как кастануть объект из массива ?

в массиве дочерние классы абстрактного

у дочерних есть свои параметры - надо достучаться до них

Igor
06.02.2018
17:28:48
Можно ли на корутинах сделать стрим формата Rx, или может быть даже есть какой-то компонент такого формата? То есть producer, на которого можно подписаться

Kirill
06.02.2018
17:29:09
.filtetIsInstance<Child>()?

Igor
06.02.2018
17:30:35
Можно ли на корутинах сделать стрим формата Rx, или может быть даже есть какой-то компонент такого формата? То есть producer, на которого можно подписаться
Так на Channel можно же подписываться. Хотя по правильному скорее из него читать “засыпающими” методами.

Igor
06.02.2018
17:31:57
Если что, вот доки https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#channels

Виталий
06.02.2018
17:33:27
.filtetIsInstance<Child>()?
нет такого метода ( private val array = arrayOfNulls<MainSprite>(10)

Andrew
06.02.2018
17:33:54
https://github.com/Kotlin/kotlinx.coroutines/blob/master/reactive/coroutines-guide-reactive.md и вторая must-read ссылка

Kirill
06.02.2018
17:34:28
нет такого метода ( private val array = arrayOfNulls<MainSprite>(10)
Сделай .toList() перед. Ну или я напутал с именем

Andrew
06.02.2018
17:34:40
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter-is-instance.html

Странно, что нету. Пробовали явно его проимпортить? Это extension-функция всё-таки.

Google
Виталий
06.02.2018
17:38:17
да там вообще не особо много мктодов:

один объект надо достать из массива и кастануть, а не весь массив фильтровать

Sergey
06.02.2018
17:41:02
че за array[5]?

там точно list?

а то чет показывает MainSprite

Виталий
06.02.2018
17:41:38
а то чет показывает MainSprite
private val array = arrayOfNulls<MainSprite>(10)

Sergey
06.02.2018
17:43:19
array.filterNotNull() :)

можно так еще

Andrew
06.02.2018
17:48:44
Конечно, если ты уверен, что там MainSprite будет. Если нет, то (it as? MainSprite)?.let { /* it имеет нужный тип*/ } else { /* обработать ошибку */ }

Виталий
06.02.2018
17:48:50
array[5]?.let { it as MainSprite }
Спасибо. Это эквивалентно жабе "((MainSprite) array[5]). " ? в плане оптимизации там памяти жрать не будет ?

Anton
06.02.2018
17:49:29
А ты че хайлоад пишешь?)

Виталий
06.02.2018
17:49:48
ну вообще MainSprite это родительский абстрактный, мне его в другие кастить

А ты че хайлоад пишешь?)
типа обучаюсь анверное )

Igor
06.02.2018
17:50:45
А где можно почитать хорошо о CoroutineContext?

Roman
06.02.2018
17:51:27
@relizarov А почему в AbstractContinuation:103 запрограммировано такое странное поведение: если мы в Cancelled состоянии, то любой вызов resume просто игнорируется, а вот resumeWithException отправляет мое приложение в фатал? Нарвался в реализации функции okhttp.Call.await().
Это чтобы exception не потерялся. А на нормальный resume ругаться нельзя - всегда есть вероятность что он случится сразу после cancel. Про resumeWithException тоже обсуждаемо, но лучше это обсуждение вести в https://github.com/Kotlin/kotlinx.coroutines/issues

Andrew
06.02.2018
17:51:36
obj as? Type либо кастует к нужному типу, либо даёт null, если не кастуется. Похоже на жабу, но null вместо эксепшна. Память жрать там точно нечему.

Виталий
06.02.2018
17:52:31
obj as? Type либо кастует к нужному типу, либо даёт null, если не кастуется. Похоже на жабу, но null вместо эксепшна. Память жрать там точно нечему.
а .let {} просто лямбда (не шибко шарю еще, в этом варианте после компиляции эта лямбда будет создаваться постоянно или ей уже отложено место в памяти ?)

Google
Andrew
06.02.2018
17:54:27
Если нет уверенности, что объект с индексом 5 имеет тип VerticalSinSprite, то стоит as? использовать. as киет эксепшн.

Andrew
06.02.2018
17:55:06
Я не в теме, как нынче дела с инлайнингом лямбд, но это похоже на экономию на спичках.

В конце концов, при желании можно писать код и проверять Kotlin Bytecode, на панели с которым есть кнопочка декомпиляции в джаву (у меня, правда, идея вешалась намертво на ней, когда я последний раз пробовал).

Andrew
06.02.2018
17:58:31
Tools | Kotlin | Show Bytecode, а на появившейся панели Decompile. Я, правда, в IDEA, но я сомневаюсь, что этой фичи нет в AS, ибо она давняя.

Виталий
06.02.2018
18:00:46
Tools | Kotlin | Show Bytecode, а на появившейся панели Decompile. Я, правда, в IDEA, но я сомневаюсь, что этой фичи нет в AS, ибо она давняя.
var10000 = this.array[5]; if(this.array[5] != null) { MainSprite var2 = var10000; var10000 = var2; if(!(var2 instanceof VerticalSinSprite)) { var10000 = null; } VerticalSinSprite var5 = (VerticalSinSprite)var10000; if(var5 != null) { var5.setTimer(1.0F); } } это результат array[5]?.let { it as? VerticalSinSprite }?.timer = 1f ))

Andrew
06.02.2018
18:01:34
Тьфу, конечно, let -- это ж inline fun, её вообще в байт-коде не будет.

Виталий
06.02.2018
18:05:13
Тьфу, конечно, let -- это ж inline fun, её вообще в байт-коде не будет.
пасиб за наводку )) теперь все буду декомпилить )))

Igor
06.02.2018
18:14:02
Есть такой вот код (https://gist.github.com/komigor/9f7013935d3d8a78eaece1605c304be0). Интересующие меня методы Subscription::withCallback, Subscription::onNextCallback Когда я добавляю в последний перед launch в onNextCallback delay(1), то все отлично, и эвенты постятся в результирующий контекст в произвольном порядке из каждой из двух созданных корутин. Когда же delay нет, эвенты постятся только из первой корутины, и только по ее финишу – из второй. Может кто-то подсказать в чем дело, и почему такое странное поведение?

Sabbath
06.02.2018
18:32:33
Добрый вечер, а не подскажете как в идее подсветку для аннотаций в котлине включить?

И второй вопрос - не возникает ли проблем при испоьзовании querydsl с котлином

Sabbath
06.02.2018
18:39:36
Ну вот попробовал в идее конвертнуть класс в котлиновский и подсветка с аннотаций над классом пропала, тупо все оранжевое

Обычный entity класс с jpa аннотациями

Руслан
06.02.2018
18:41:00
Можно скриншот

Sabbath
06.02.2018
18:41:17
Эм щас пару минут



До и после

Google
Andrew
06.02.2018
18:47:06
Дык работает, так и задумано.



Там же, само собой, можно подправить ;)

Sabbath
06.02.2018
18:48:29
Да так куда лучше) спасиб

Тогда второй вопрос) с querydsl проблем не будет?)

Yuri
06.02.2018
18:52:37
не будет ?

Sabbath
06.02.2018
18:52:53
А ты пробовал?

Yuri
06.02.2018
18:53:24
дважды причем

Sabbath
06.02.2018
18:54:11
Классы для querydsl нормально генерятся?

Или надо колдовать?

Yuri
06.02.2018
18:54:56
классы будут генериться на java ибо querydsl ничего про Kotlin не знает

Igor
06.02.2018
18:57:39
Это да, не уверен, что там где-то ошибка есть, поведение просто странное

Igor
06.02.2018
19:36:28
suspend не нужен, вероятно там что-то было до этого, что требовало. Исправил
Кстати, я не увидел особого смысла прокидывать callbackContext в withCallback, а потом в onNextCallback Проще написать так fun withCallback(function: (E) -> Unit) а у же в лямбде заворачивать в launch если надо

Quantum Harmonizer
06.02.2018
19:38:18
На то он и EAP, что могут фичи отламываться
кажется, просто не надо пользоваться сабмодулями :)

Igor
06.02.2018
20:03:58
Кстати, я не увидел особого смысла прокидывать callbackContext в withCallback, а потом в onNextCallback Проще написать так fun withCallback(function: (E) -> Unit) а у же в лямбде заворачивать в launch если надо
Так ведь для определения контекста выполнения запроса нужно его передать, нет? То есть, чтобы например на UI получать эвенты, нужно же передать вполне определенный контекст?

Igor
06.02.2018
20:07:42
Так ведь для определения контекста выполнения запроса нужно его передать, нет? То есть, чтобы например на UI получать эвенты, нужно же передать вполне определенный контекст?
Не совсем понял, это механический рефакторинг, который ничего не меняет. Вызовы просто изменятся на: subA.withCallback { event -> launch(callbackContext) { println("Event A: $event") } }

Igor
06.02.2018
20:09:12
А, да, точно. Почему-то не подумал сразу с другой стороны переключаться. Наверное идеологически правильнее первый вариант, чтобы не забывать о том, что нельзя на том же контексте находиться, но так тоже можно, конечно.

Kirill
06.02.2018
20:12:51
вспоминая про стейт машины. не то что я искал, но может быть интересно: https://github.com/anupcowkur/statelin

Igor
06.02.2018
20:16:15
Я опять забыл ? Ребят, а в чем принципиальная разница между lauch и async?

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