@kotlin_lang

Страница 756 из 982
Quantum Harmonizer
13.07.2018
14:43:07
val a = new ArrayList(); val a2 = new ArrayList<>();
первый вариант — это сырой тип, который после Java 1.5 вообще не стоит использовать.

вывода типов там и в помине нет

Quantum Harmonizer
13.07.2018
14:44:00
это баг)

Google
Bogdan
13.07.2018
14:45:38
+ иногда приходится задать листенер + передаешь лябду, и нада юзать уродливые дженерики, и авто вывода типа как у котлин нет (я обявил перееную и там уже указал дженерик), в котле даже писать не нада в итоге

это баг)
уже в группе новичков по джаве натыкались на такое

Bogdan
13.07.2018
14:55:56
котлин как раз про не компилюсь

Я дотошный. Резюмируем - в коде нет ни синтаксических, ни семантических ошибок, тем не менее, он не компилируется. Это плохо.
это мозг говорит что их нет, но по факту есть вызов функции которая принимает тип с с дженериком, кооторого нет, и еще непонятная d

dimiii
13.07.2018
15:06:25
это мозг говорит что их нет, но по факту есть вызов функции которая принимает тип с с дженериком, кооторого нет, и еще непонятная d
>>> fun foo(a: Boolean, b: Boolean, c: Boolean) = println("$a, $b, $c") >>> val a = 1 >>> val b = 2 >>> val c = 3 >>> val d = 4 >>> foo(a < b, true, c > d) true, true, false

Quantum Harmonizer
13.07.2018
15:06:52
тип никак не может называться true :)

dimiii
13.07.2018
15:08:21
тип никак не может называться true :)
Да, "систему" не обойти ) >>> foo(a < b, `true`, c > d) ... ...

Quantum Harmonizer
13.07.2018
15:08:47
Ой, точно, может, но с бэктиками.

dimiii
13.07.2018
15:09:47
Ой, точно, может, но с бэктиками.
Нене, все верно, оно работает "в своей логике", многоточия в repl - это фактически ошибка парсера/компилятора

Bogdan
13.07.2018
15:09:53
Да, "систему" не обойти ) >>> foo(a < b, `true`, c > d) ... ...
хорошо предложите свой вариант

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

Google
Bogdan
13.07.2018
15:11:15
тот код можно написать иначе, с типом и дженериклм не всегда

dimiii
13.07.2018
15:11:19
хорошо предложите свой вариант
Да собственно у меня это и был посыл - true такой же терм, как идентификатор, парсер должен пойти по ветке разбора логических выражений и аппликации функции, а не дженериков

Vladimir
13.07.2018
16:10:45
Честно говоря, в Java достаточно редко вызываются дженери-методы.
Ага, пока не сталкиваешься с тем, что в не очень сложной цепочке со стримами javac не может вывести тип. И тут код превращается в кровавое месиво.

Quantum Harmonizer
13.07.2018
16:12:18
Alexey
13.07.2018
16:19:07
Посоны, а кто-нибудь сталкивался с тем что не получается замокать метод, который принимает функцию? onErrorProcessSingle(error: Throwable, errorClass: Class<E>, customHandler: () -> Single<T>): Single<T>

пробую как-то так: whenever(errorHandler.onErrorProcessSingle(socketException, any<Class<ImageNPayException>>(), any<() -> Single<CardApiModel>>())) .thenReturn(Single.error(NoInternetImageNPayException(socketException)))

Не мокается

Konstantin
13.07.2018
16:20:19
А что говорит хоть?

Alexander
13.07.2018
16:20:19
Не мокАется?

Простите, вырвалось

Alexey
13.07.2018
16:20:45
А что говорит хоть?
Просто падает на вызове этого метода

Ну то есть как-будто не сработало мокирование

Не мокАется?
Поглубже окунать пробовал, все равно не мокАется ага

Как гусь, сухой из воды(

Mikhail
13.07.2018
16:25:54
а не пробовал с типовыми аргументами any играться?

или заменить на anyObject()

Alexey
13.07.2018
16:29:27
а не пробовал с типовыми аргументами any играться?
Пробовал, не помогает ничего, или не компилится или падает с тем что типо неверно мокаю

или заменить на anyObject()
Я использую Котлин мокито

Google
Alexey
13.07.2018
16:29:41
Которое от nharman или как его там

Mikhail
13.07.2018
16:29:53
Я использую Котлин мокито
ну а что мешает мокито напрямую один раз поюзать?

Alexey
13.07.2018
16:32:58
ну а что мешает мокито напрямую один раз поюзать?
Пробовал, не помогает, anyObject() не работает в котлине из-за налл сейф на уровне типа

Пришлось не мокировать, а использовать реальный объект, что по сути не правильно

Igor
13.07.2018
16:34:16
Моки это вообще зло (и rx тоже ?)

1337
13.07.2018
16:35:33
а рх че?

dimiii
13.07.2018
16:37:58
пробую как-то так: whenever(errorHandler.onErrorProcessSingle(socketException, any<Class<ImageNPayException>>(), any<() -> Single<CardApiModel>>())) .thenReturn(Single.error(NoInternetImageNPayException(socketException)))
А вот первый аргумент - вполне себе инстанс класса, у которого, сомневаюсь, что переопределен equals. Может быть в этом дело?

dimiii
13.07.2018
16:39:51
Это SocketTimeoutException
Предлагаю попробовать any<Class<SocketTimeoutException>>() - вот об этом я

Alexey
13.07.2018
16:40:54
Предлагаю попробовать any<Class<SocketTimeoutException>>() - вот об этом я
Попробую, думаешь дело в том что нельзя передавать моки и не моки в аргументы?

dimiii
13.07.2018
16:41:28
Попробую, думаешь дело в том что нельзя передавать моки и не моки в аргументы?
Ну я чисто на интуиции, предполагаю, что матчер не матчит, потому что видит разные объекты Это пальцем в небо

Igor
13.07.2018
16:55:40
а рх че?
По тому что не нужен ?‍♀️ rx.Single очевидно заменяется базовыми корутинами, а observable каналами

1337
13.07.2018
16:55:49
а реактор?

Egor
13.07.2018
16:57:19
А реактор вроде и не про то

1337
13.07.2018
16:57:53
это таже рх джава

тока без оглядки на ведроид

Egor
13.07.2018
16:58:34
А то рх джава сильно на ведроид смотрит

1337
13.07.2018
16:59:21
ну реактор ваще по этой самой причине и повился

Konstantin
13.07.2018
17:03:13
По тому что не нужен ?‍♀️ rx.Single очевидно заменяется базовыми корутинами, а observable каналами
Кажлый раз спрашиваю: а хитрые комбайны? А ещё всякие вещи именно для управления стримами их трансформациями?

Google
Andrey
13.07.2018
17:03:23
Я просто оставлю это здесь как пример того, что может Kotlin, и как не надо на нём писать: typealias Action = () -> Unit infix operator fun Unit.plus(s: String) = print(" $s") infix operator fun Unit.plus(next: Action): Action = print(" ") go next infix fun Unit.go(next: Action): Action = next val we: Action = { print("We") } infix fun Action.are(the: Action): Action = this() + "are" + the val the: Action = { print("the") } infix fun Action.best(programmers: Action): Unit = (this() + "best" + programmers)() val programmers: Action = { print("programmers") } val sentence = we are the best programmers fun main(args: Array<String>) = Unit

Igor
13.07.2018
17:08:25
Кажлый раз спрашиваю: а хитрые комбайны? А ещё всякие вещи именно для управления стримами их трансформациями?
Мы сейчас про всякие single/completable/maybe или про настрощие стримы типа observable/flow? Думаю, все согласятся что стримы из [0..1] элементов, ну очевидно не нужны. А вот по поводу "бесконечных", можно подискутировать.

Andrey
13.07.2018
17:10:00
infix fun Unit.go(next: Action): Action = next

dimiii
13.07.2018
17:10:40
infix fun Unit.go(next: Action): Action = next
А, понятно, я в repl скопипастил просто А букв много

Egor
13.07.2018
17:14:06
Нужны ?
Вот, кстати, в реакторе оно лучше сделано. А вообще-то не нужны

Konstantin
13.07.2018
17:15:01
Admin
ERROR: S client not available

1337
13.07.2018
17:15:16
Mono-то не нужны?

Egor
13.07.2018
17:16:10
Вот моно это как раз адекватная монада, не эти нариковые стримы из 0 или 1 элемента

Konstantin
13.07.2018
17:19:51
Обратись можно перфокартами, но зачем отходить от удобства.
Ну не, чистый single или maybe реально заменяется корутиной. Для комбинирования с другими стримами да, удобно. Но без них все равно можно жить.

Andrey
13.07.2018
17:20:56
Вот на вычислении sentence всё и выводится

dimiii
13.07.2018
17:21:34
Спасибо

Igor
13.07.2018
17:22:02
Конечно настоящие. Ну, completable еще нужен и он тоже может быть бесконечным, а single и maybe просто удобны, хотя без них вполне можно обойтмсь
> completable > он тоже может быть бесконечным Как так, у него только одно событие close. Он даже в рамках rx не нужен, тк спокойно эмулируется Single<Unit>

Andrey
13.07.2018
17:22:05
Я же говорил, что это пример, как не надо писать ?

Google
Quantum Harmonizer
13.07.2018
18:26:35
Сегодня вмёрджили KEEP на inline-классы.

Igor
13.07.2018
18:27:30
На секунду прочитал тайп-классы ? ... (чуть со стула не свалился)

Ну типа observable.flatMapCompletable Но не суть, что делать с настоящим стримами? :)
Сложный вопрос, я вроде и пишу приложения с реактивным-UI, но обхожусь без сложных RX/каналов вообще. (на react с elm архитектурой) Имхо если все же нужны реактивные-сримы, то в 99% случаем хватает и map/zip/flatMap из тех же каналов. P.S. Хотелось бы увидить реальный кейс где нужны сложные "операторы".

1337
13.07.2018
18:40:29
что еще за каналы?

Igor
13.07.2018
18:40:57
https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#channels

dimiii
13.07.2018
18:51:57
Ух ты! Долгожданный 2.0 на подходе https://github.com/spekframework/spek/releases

Igor
13.07.2018
18:58:46
Что бы сущностей не плодить (c) оккам. Зачем это Completable с дополнительным +100 методами и учитывая, как они хреново конвертятся друг в друга.

Konstantine
13.07.2018
18:59:09
Пока все эти аргументы о "ненадобности" выглядят как «я не пользуюсь - значит не нужно»

Quantum Harmonizer
13.07.2018
19:01:58
Пока все эти аргументы о "ненадобности" выглядят как «я не пользуюсь - значит не нужно»
Погоди, зачем создавать частные случаи, если можно выразить общими средствами?

Давай создадим BiObservable, который можно объёрвить BiConsumer'ом, мы ж не лохи — кортежи/пары объёрвить.

Konstantine
13.07.2018
19:02:44
Погоди, зачем создавать частные случаи, если можно выразить общими средствами?
А зачем выражать общими с лишним кодом, когда есть готовые под частые частные случаи.

Quantum Harmonizer
13.07.2018
19:04:28
А зачем выражать общими с лишним кодом, когда есть готовые под частые частные случаи.
Потому что весь этот Completable можно выразить как typealias Completable = Single<Unit>. Или хотя бы заэкстендить сингл.

он не стоит того, чтобы на него писался такой же полноценный монструозный класс, как остальные классы в Rx.

Konstantine
13.07.2018
19:04:54
Нет, оно уже написано. Зачем сейчас, когда оно есть уже, говорить, что не надо.

Если бы он был в планах, я бы мог понять, хотя и то думаю можно оспорить, но сейчас чего

Quantum Harmonizer
13.07.2018
19:05:52
А зачем, если есть такой же комплитабл уже готовый?
А зачем грэдлу его скачивать на комп, дексеру его конвертить, рантайму его загружать и компилировать? Эту дырку от бублика нужно задепрекейтить и выпилить.

Quantum Harmonizer
13.07.2018
19:06:38
О да, там же на комплитабл двадцать минут сборки идёт:)
RxJava состоит из таких излишеств чуть более, чем полностью.

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