
Boris
13.10.2017
18:57:06
т.е. я конечно выкрутился без наследования, но осадочек остался

Quantum Harmonizer
13.10.2017
18:58:25

Boris
13.10.2017
18:59:02
при том, что если бы сам рабоал, то я бы не стал его функцией с тайпалиасом делать, с делал бы обычным интерфейсом

Руслан
13.10.2017
19:00:53
а зачем функциям наследование? если хочется SAM - значит у тебя две имплементации интрефейса или две имплементации функционального типа в случае котлина, которые ты передаешь в какую-то другую функцию или метод

Google

Boris
13.10.2017
19:03:20

stas
13.10.2017
19:04:16
Стоит ли брать "kotlin в действии"?

Руслан
13.10.2017
19:04:56
Типо неизменяемый интерфейс/изменяемый класс? Если не сложно минимальный пример, мне кажется можеть быть интересная задача.

Boris
13.10.2017
19:16:10
Я ща с телефона, код не могу провести, но смысл в том, что у меня есть конфигуратор, это экстеншн функция, который я сделал тайпалиасом. И вот я хочу сделать комплексный конфигуратор, который просто содержит несколько других, но не могу сделать его без отдельного билдера
Потому что комплексный конфигуратор не может быть от конфигуратора унаследован
Так как конфигуратор это экстеншн функция

Quantum Harmonizer
13.10.2017
19:25:17
Я ща с телефона, код не могу провести, но смысл в том, что у меня есть конфигуратор, это экстеншн функция, который я сделал тайпалиасом. И вот я хочу сделать комплексный конфигуратор, который просто содержит несколько других, но не могу сделать его без отдельного билдера
Мне, например, ничего не понятно.
Я знаю три формы extension-функций: объект функционального типа с ресивером, top-level extension-функция и member extension-функция.
typealias я могу себе представить только для функционального типа.
Кто от кого не может быть унаследован?

Boris
13.10.2017
19:28:40
Тип Project.()->Unit от него класс унаследован быть не может. Так мне компилятор сказал по крайней мере

Quantum Harmonizer
13.10.2017
19:31:11

Boris
13.10.2017
19:50:59
Можно унаследовать от (Project) -> Unit, результат будет тот же.
технически ты абсолютно прав, проблема только в том, что я-то сделал тип typealias ProjectConfigurator = Project.()->Unit и теперь хочу, чтобы мой комплекс-конфигуратор тоже был проджект-конфигуратором, однако сделать так нельзя. Я конечно могу унаследовать его от функции и делать вид, что всё ок, но в строготипизированном смысле он конфигуратором не будет. Это наверное больше проблема тайпалиасов, конечно, но суть не меняется. Я бы был вполне доволен в этой ситуации, если бы мне просто дали возможность просто инстанцировать функциональные интерфейсы


Quantum Harmonizer
13.10.2017
19:56:15
технически ты абсолютно прав, проблема только в том, что я-то сделал тип typealias ProjectConfigurator = Project.()->Unit и теперь хочу, чтобы мой комплекс-конфигуратор тоже был проджект-конфигуратором, однако сделать так нельзя. Я конечно могу унаследовать его от функции и делать вид, что всё ок, но в строготипизированном смысле он конфигуратором не будет. Это наверное больше проблема тайпалиасов, конечно, но суть не меняется. Я бы был вполне доволен в этой ситуации, если бы мне просто дали возможность просто инстанцировать функциональные интерфейсы
Да, согласен.
То же самое недавно было, когда я пытался заимплементить suspend () -> ....

Leonid
13.10.2017
20:04:49
а есть интеграция старого java.util.concurrent.Future с корутинами?

? animufag ?
13.10.2017
20:11:35

Google

Leonid
13.10.2017
20:12:31
Если бы у меня был выбор, я бы его и не использовал ?

? animufag ?
13.10.2017
20:12:45
ну вообще по идее можно сделать экстеншен функцию как для любой блокирующей операции
экстеншен потому что красивее

Quantum Harmonizer
13.10.2017
20:13:15
Не соглашусь. Засабмитить кучу задач, получить пачку фьюч, дождаться из всех — норм же задача.

Leonid
13.10.2017
20:13:44
ну я так понимаю, у Future нет коллбека или чего-то такого, поэтому непонятно, когда пробуждать корутину
можно только сделать .get() и надеяться, что не заблокируешься
или таймаут поставить

Quantum Harmonizer
13.10.2017
20:16:58
Это фак(т).

? animufag ?
13.10.2017
20:17:12

Leonid
13.10.2017
20:17:42
так тогда весь поток заблокируется, и весь профит корутин уйдёт в никуда?

? animufag ?
13.10.2017
20:18:59
ну да
у тебя же блокирующее апи - получай удар по своему перфекционизму

Quantum Harmonizer
13.10.2017
20:21:21
лол)
нет, можно создать event loop, который будет тыкать палочкой в эти фьючи)

? animufag ?
13.10.2017
20:22:14

Boris
13.10.2017
20:22:14
Вроде в гуаве есть годные фьючеры

Quantum Harmonizer
13.10.2017
20:22:43

Boris
13.10.2017
20:22:51
Если комплитабл нет возможности использовать

? animufag ?
13.10.2017
20:23:16

Boris
13.10.2017
20:24:34

Google

Руслан
13.10.2017
20:26:04
https://github.com/Spikhalskiy/futurity

Leonid
13.10.2017
20:31:13

Руслан
13.10.2017
20:31:36
Ну тогда относительно неплохое решение - futurity

Leonid
13.10.2017
20:32:16
Гляну, спасибо

Руслан
13.10.2017
20:35:41
Если у тебя не хайлоад а пару фьюч, то можно действительно их в пул запихнуть и пусть там блокируют потоки
будет в 100 раз проще
или если тебе результат их интересует но не прям мнгновенно (например летенси в 10мс переживешь), то можно в обычный while(isDone) { delay(10) } внутри корутины завернуть проверку на готовность фьючи, а потом уже с чистой совестью делать get()
А правда что в андроиде нужно некоторый код запускать на UI потоке иначе он не выполнится(ну в смысле выполнится с исключением или выполнится не так как ожидалось)? Это сделано для того чтобы не нужно было синхронизировать состояние?

? animufag ?
13.10.2017
21:26:36
точно не помню как это было
ну и на опенгл также делал с бесконечным циклом

Руслан
13.10.2017
21:28:12
ну т.е. есть какой-то глобальный стейт, и чтобы не было проблем с синхронизацией(не лочится, не дропать кадры?) этот стейт обновляют из одного потока?

? animufag ?
13.10.2017
21:28:42
немного странно почему всё быстро становилось плохим. ведь шанс попасть с изменением в неудачный момент не такой уж большой

Aliaksei
13.10.2017
21:28:53
Пример не с UI тредом но доступом из треда где объект создался есть в том же Realm https://realm.io/docs/java/latest/#threading

? animufag ?
13.10.2017
21:28:56

Aliaksei
13.10.2017
21:29:06
доставило проблем не мало в своё время

Peter
13.10.2017
21:29:24
Вообще вроде практически все гуи фрейворки имеют UI поток.

Quantum Harmonizer
13.10.2017
21:47:03
Даже JavaFX
А вот Swing можно мутировать из нескольких потоков. Но никто не говорил, что это хорошо :)

Google

Peter
13.10.2017
21:53:24
Ну в свинге есть UI тред, и насколько помню всё перерисовку настойчиво рекомендуют делать на нём)
Там invokeLater и тому подобное

Dmitry
13.10.2017
23:31:18
Caused by: org.gradle.api.GradleException: Compilation error. See log for more details
at org.jetbrains.kotlin.gradle.tasks.TasksUtilsKt.throwGradleExceptionIfError(tasksUtils.kt:8)
- где найти этот лог?

Leonid
13.10.2017
23:42:47
Запустить gradle с
--debug --stacktrace
?

Dmitry
13.10.2017
23:54:05
Это и есть кусок стектрейса из гредла. Падает что-то в компиляторе котлина, и гредл не видит, что именно.

Quantum Harmonizer
14.10.2017
06:44:01

Dmitry
14.10.2017
08:21:47
Каков весь стектрейс?
https://pastebin.com/9cXKKFzX
Проблема была в куче модулей и лишними compileOnly, возможно связано с флагами таргет апи 1.7, которые почему-то варнинги выдают (хотя стандартная либа для 1.7 своя есть).
Если есть желание поковырять, могу дать доступ к проекту.

Nick Senchurin
14.10.2017
11:23:16
всем привет, потихоньку постигаю коаны, а не подскажете, как лечить
No tests found for given includes:
[test/i_introduction/_1_Java_To_Kotlin_Converter/N01JavaToKotlinConverterKtTest.kt]
в терминале выполняю кастомный тест
./gradlew test —tests test/i_introduction/_1_Java_To_Kotlin_Converter/N01JavaToKotlinConverterKtTest.kt
причем из гуи студии тест корректно проходит

Konstantine
14.10.2017
18:56:56
Кстати, не было инфы, в kotlin-android-extensions не собираются сделать что-то вроде баттеркнайфовских onclick и пр?

JRoot3D
14.10.2017
18:57:57

Konstantine
14.10.2017
18:58:07
А вот это не знаю. Шо там в нем такое?

JRoot3D
14.10.2017
18:58:39
Сразу пишешь button.onClick {}

balolam
14.10.2017
18:58:51
Будет даже хуже по читаемости

Konstantine
14.10.2017
18:59:38
Будет даже хуже по читаемости
На вкус и цвет так то)
Мне как в баттере сделано нравится, но тупо ради этого его тянуть нет желания, тем более, что все вьюшки есть через android-extensions

balolam
14.10.2017
19:01:24
Ну вот, скорее всего вы просто привыкли к такому подходу. Чисто со стороны, написать метод отдельно под это имея ламбды и android-extentions в Kotlin, как-то не очень красиво.

JRoot3D
14.10.2017
19:03:17
Сахара не надо (с)

Boris
14.10.2017
19:13:42

JRoot3D
14.10.2017
19:17:58

Google

Boris
14.10.2017
19:28:31

Quantum Harmonizer
14.10.2017
20:18:34

JRoot3D
14.10.2017
20:19:46

Konstantine
14.10.2017
21:14:25
Речь о не алиасах, а то чем-то вроде аннотаций в butterknife.
Тобишь отдельный метод вешается сразу на вьюху. Это не идеально, но по мне красивше чем setOnClickListener

Quantum Harmonizer
15.10.2017
08:30:49

Роман
15.10.2017
10:34:22
textView и progressBar по идее должны быть сверху и снизу центрального view, а это совсем не так
https://pastebin.com/8GQWBMbw
а, ну приведенный кусок кода — это содрежимое bottom sheet dialog

Quantum Harmonizer
15.10.2017
10:37:18

Роман
15.10.2017
10:37:44
один момент
Могу файл с layout capture сбросить, скрин оттуда

Quantum Harmonizer
15.10.2017
10:46:48
а где текствьюшка?

Роман
15.10.2017
10:47:39
Она вообще не видна, это тоже меня смущает. но, думаю, оно как-то связано

G_Dee
15.10.2017
10:49:11
Кто нибудь пишет на котлин (JS)? Используете в продакшн?