
Gor
05.12.2017
13:27:36
если поведение от меня скрыто
и на один метод может произойти 3 события
то тут нужен листенер обыкновенный

Google

Aleksandr
05.12.2017
13:28:22
_пожал лапками_ я ж не спорю, нужно оптимизировать и менять по месту)

Gor
05.12.2017
13:28:49
что я и пытаюсь сделать) это тривиальная задача, просто стандартный подход "создать интерфейс - реализовать и прокинуть" в коде выглядит большим
вот и интересно
потому как одиночные листенеры заменяют на лямбды
а что делают с комплексными

Igor
05.12.2017
13:29:14

Gor
05.12.2017
13:32:35

Igor
05.12.2017
13:33:36
проще в группу сбить
Ну не знаю, это давно не true-way даже в java (8/9)
> Обычный подход с интерфейсом занимает довольно много места
А почему много места кстати? Вроде компактно
object : Listener { … }

Gor
05.12.2017
13:36:36
"Ну не знаю, это уже давно не true-way даже в java (8/9)"
а какой тру вей?
"А почему много места кстати? Вроде компактно"
если там 3 - 4 метода, то переопределив их код будет заниматся довольно много бесполезного места, да и методы фактически можно заменить на лямбды
ну и в таком подходе есть какие-то явные минуса https://pastebin.com/xBnJGHPw ?

Igor
05.12.2017
13:49:24
У тебя неправильный пример ? https://pastebin.com/PCQvTB0b
Плюс благодаря abstract class OldStyleComplexListenerStub можно не реализовывать неинтересные методы.
Я бы хотел посмотреть на реальный пример.
Кажется что все таки можно заменить один жирный-листнер на 4 метода, принимающие лямбды и ничего не сломается.
Да и всегда можно “реализовать” паттерн event из C#

Gor
05.12.2017
13:51:03
у меня еще хороший пример, на самом деле есть кейс где все 4 лямбды влетят в одну строку) но согласен плюсы такие себе

Google

Gor
05.12.2017
13:54:07
хотя согласен что не везде юзабельно, да и зачастую лямбда будет длинноватой

Vadim
05.12.2017
17:38:36

Gor
05.12.2017
17:39:39
ну и менеджить я нажатия должен в классе который стартует этот диалог

Igor
05.12.2017
17:52:19

Gor
05.12.2017
17:52:59
да и какой профит енама в этом случае?

Quantum Harmonizer
05.12.2017
17:54:29

Gor
05.12.2017
17:56:20

Sergey
05.12.2017
18:08:01
https://www.reddit.com/r/Kotlin/comments/7hoytl/kotlin_team_ama_ask_us_anything/
multi-catch возможно завезут в след релизах
>We could have done companion objects better, and inheritance by delegation too. We'll probably be able to fix these in the future, but it will take a long time

Igor
05.12.2017
18:24:54

Sergey
05.12.2017
18:25:34
ну и дальше было несколько комментов в духе JB очень сильно инвестирует в Kotlin/Native
и с намеками что хотят чтобы его юзали там где сейчас golang
Kotlin/Native + coroutines это такой себе golang на стероидах выйдет)

Igor
05.12.2017
18:27:18
Да и “union and intersection” типы заброковали ?

Sergey
05.12.2017
18:27:35
а они есть, только на уровне компилятора

Google

Sergey
05.12.2017
18:27:42
и не хотят их выносить оттуда на общее пользование
зато по HKT пишут что это может дать возможность делать интересные кейсы, но сама фича довольно хитрая и поэтому в ближайшее время ее ждать не стоит

Igor
05.12.2017
23:04:33
Господа, объясните почему в байт-коде метод test1 не дергает Continuation, а прямолинейно возвращает null?
Как вызывающий код понимает, что метод по сути синхронный?
suspend fun test1(): String? = null
suspend fun test2(): String? {
delay(0)
return null
}

Kirill
05.12.2017
23:06:40
@angmarr
Скорее всего, компилятор видит отсутствие suspension points внутри функции
И компилирует в обычную функцию

Михаил
05.12.2017
23:11:12
что там кстати про корутины слышно, когда хотят экспирементальный статус изменить? или нет пока об этом речи?

Kirill
05.12.2017
23:11:56
Считай что experimental -- это просто название пакета :)
Об этом есть речь. Скоро.

Igor
05.12.2017
23:22:43

Kirill
05.12.2017
23:25:00
Если напомнишь -- я утром кину линк на точное место в коде компилятора.
Я, правда, тот код не писал. Только читал. И вроде бы я там видел эту оптимизацию

Igor
05.12.2017
23:28:36

Kirill
05.12.2017
23:28:57
А какая ей разница?
Ты же не можешь test1 вызвать из не suspend функции?
*не из лаунчера

Igor
05.12.2017
23:30:48
А какая ей разница?
Допустим у меня есть код
fun main(args: Array<String>) {
runBlocking {
val a = Example8.test1()
val b = Example8.test2()
println(a + b)
}
}
Мне кажется тут явно компилятор должен понимать синхронные методы или нет
Они оба suspend, но по факту первый синхронный

Kirill
05.12.2017
23:31:24
Так и плевать
Давай завтра. У меня 2:31 уже )

Google

Igor
05.12.2017
23:32:13
OK

Quantum Harmonizer
05.12.2017
23:40:15
Я так понял по байт-коду, что метод возвращает либо корутину, полученную от IntrinsicsKt.getCOROUTINE_SUSPENDED ()Ljava/lang/Object, либо, собственно, значение.
В месте вызова тоже нетривиальный код, который, собственно, и действует в зависимости от полученного значения.


Igor
05.12.2017
23:53:58
Я так понял по байт-коду, что метод возвращает либо корутину, полученную от IntrinsicsKt.getCOROUTINE_SUSPENDED ()Ljava/lang/Object, либо, собственно, значение.
В месте вызова тоже нетривиальный код, который, собственно, и действует в зависимости от полученного значения.
Хех, если написать
suspend fun test1(): Any? = COROUTINE_SUSPENDED
и вызвать из runBlocking, то приложение зависнет.
Но в общем все прояснилось - COROUTINE_SUSPENDED используется как маркер что результат вернется через колбек.

Михаил
06.12.2017
00:55:26
Об этом есть речь. Скоро.
Ну некие траблы были пару месяцев назад, поэтому пока жду выхода из экспирементал. Там и гуд практайсы появятся

LynX
06.12.2017
05:44:52
Привет всем! Есть ли какие-то туториалы по встроенным покупкам на котлине? не могу ничего найти.

Konstantin
06.12.2017
05:59:03

Dmitriy
06.12.2017
05:59:45
Вот тот же вопрос возник, но решил не комментировать)

LynX
06.12.2017
06:07:24
прокомментировал бы лучше, мож чего прояснил)) приложение для андроида написано на котлине, теперь пытаюсь туда биллинг добавить. В официальных каналах на ютубе предложено несколько способов разной степени древности на java но нет полноценного тутора. В оф. документации непонятный какой-то способ с копированием библиотек из файлов урока и т.п. Я не в курсе какие взаимоотношения у котлина с андроидом сейчас. В iOSе добавляешь бибилиотеку стора в IDE и обращаешься к ней, хочешь на objC, хочешь на свифте. Я думал, что может в андроид мире что-то подобное есть

Admin
ERROR: S client not available

Dmitriy
06.12.2017
06:13:25

LynX
06.12.2017
06:19:45
спасибо за ответ. По описанию сообщества не понятно, что тут обсуждают котлин в чистом виде, и про мобайл нельзя. Сорри.

Gleb
06.12.2017
06:54:56

Роман
06.12.2017
09:55:40
Ребят, а подскажите, mockito в любом случае вызывает актуальную реализацию метода перед тем как заглушку сделать? И есть ли возможность этого избежать? Юзаю, само собой, котлин, хотя если в java-чатик перенаправите, пойму)

Жабра
06.12.2017
10:20:05
Долгая прогрузка, а потом
FATAL EXCEPTION: Thread-15452
Process: com.example.kirill.myapplication, PID: 30836
java.lang.StackOverflowError: stack size 1036KB
Раньше такой проблемы не было. Может кто-то подсказать?

Руслан
06.12.2017
10:27:58
я gson почти не пользуюсь, но мне кажется чтобы листы парсить ему нужен был TypeToken
ну а вообще почему у тебя весь трейс не логируется? или ты просто не скинул?

Quantum Harmonizer
06.12.2017
10:33:59
1. Похоже на слишком глубокий JSON, который уходит в далёкую рекурсию.
2. Какая реализация экстеншена fromJson?

Google

Жабра
06.12.2017
10:34:41

Kirill
06.12.2017
10:52:51

Жабра
06.12.2017
10:56:20

Gor
06.12.2017
11:27:27

Роман
06.12.2017
11:28:14

Gor
06.12.2017
11:31:16
у моков реальный метод не вызывается в принципе

Anton
06.12.2017
11:32:27
у partial моков вызывается
ну если ты сам написал call real)

Роман
06.12.2017
11:32:51

Gor
06.12.2017
11:33:14
если напишешь что-то типа
val obj = mock(Obj::class)
when(obj.getString()).doReturn("String")
возвратится "String" и реальная имплеменатция в Obj не выполнится

Роман
06.12.2017
11:33:14
я вот пытаюсь понять, почему так

Gor
06.12.2017
11:35:00
может у тебя в самом тесте ошибка, или в классе который тестишь не юзается мок а юзается реальная переменная?
ну либо как выше сказали, руками вместо кастомного ретурна отдашь реальную имплементацию

Роман
06.12.2017
11:39:35


BaLoo
06.12.2017
11:40:59
Всем привет.
Поясните, плиз, почему я могу сравнить две строки:
var s1 = "aaab"
var s2 = "aaaa"
var b = s1 < s2
но не могу два data-класса, хранящих строки?
data class StrData(var data : String)
var r1 = StrData("vsya")
var r2 = StrData( "vsyb")
var bb = r2 < r1
С вот такой ошибкой:
Error:(10, 17) Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public fun String.compareTo(other: String, ignoreCase: Boolean = ...): Int defined in kotlin.text