@kotlin_lang

Страница 443 из 982
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
вызываем loginA("username", "password", this.someCallbackFunction())
Это ты так method-reference написал? (там немножко др синтаксис)

Gor
05.12.2017
13:32:35
Это ты так method-reference написал? (там немножко др синтаксис)
я думаю это просто предложение не юзать комплексные листенеры, а для каждого поведения использовать свой метод

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
вообще лучше отходить от использования ивентов, ведь почти всегда можно заменить их на интерфейсы
слишком абстрактно, у меня есть диалог с 4 кнопками, юзер умеет нажимать на эти кнопки, как мне узнать на какую кнопку нажал юзер?

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

Gor
05.12.2017
17:52:59
enum передать параметром?
и свичем проверять какой тип пришел чтоб запустить разные методы?

да и какой профит енама в этом случае?

Quantum Harmonizer
05.12.2017
17:54:29
Gor
05.12.2017
17:56:20
exhaustive when :trollface:
та чет такое, не кажется мне удобным юзать такой подход для вьюх

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
multi-catch возможно завезут в след релизах
А что-нибудь интересное? Хотя судя по ответу Бреслава “интересное” не планируется. https://www.reddit.com/r/Kotlin/comments/7hoytl/kotlin_team_ama_ask_us_anything/dqsttz2/

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
@angmarr Скорее всего, компилятор видит отсутствие suspension points внутри функции
По сигнатуре методы не отличаются, только у первого тело короче https://i.gyazo.com/239368cb1ab63aa11683a94f2d37e0d0.png Тут видимо цимес в вызывающей стороне, но я что-то не могу осилить байт-код (а декомпиляция в java вешает IDEA)

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

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

Роман
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
Kirill
06.12.2017
10:52:51
Да, решил что слишком засорит беседу.
Так файл можно скинуть. Кому надо тот посмотрит.

Жабра
06.12.2017
10:56:20
Роман
06.12.2017
11:28:14
ты про конструкцию when().theReturn у моков?
ну у меня почему-то и doReturn().when() тоже вызывает сам метод, может, конечно, проблема в студии

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

Anton
06.12.2017
11:32:27
у partial моков вызывается

ну если ты сам написал call real)

Роман
06.12.2017
11:32:51
у partial моков вызывается
Не, у меня полный mock

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
у моков реальный метод не вызывается в принципе
ну вроде как должен в случае when().thenReturn(), нет?

я вот пытаюсь понять, почему так

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

ну вроде как должен в случае when().thenReturn(), нет?
он при запуске метода в блоке when возвращает аргумент в thenReturn, реальный вызов не происходит вот если напишешь spy вместо mock то там запускается реальный метод

ну либо как выше сказали, руками вместо кастомного ретурна отдашь реальную имплементацию

Роман
06.12.2017
11:39:35
может у тебя в самом тесте ошибка, или в классе который тестишь не юзается мок а юзается реальная переменная?
Да нет, сейчас, к сожалению не за тем компьютером, где писал код, вечером буду, если будут вопрос, я, с твоего разрешения, отпишусь.

он при запуске метода в блоке when возвращает аргумент в thenReturn, реальный вызов не происходит вот если напишешь spy вместо mock то там запускается реальный метод
ну, вот этого объяснения мне достаточно, в принципе, спасибо, мне нужно было уточнить, что я правильно понял, как работает Mockito.

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

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