@kotlin_lang

Страница 346 из 982
Nikita
26.09.2017
09:46:09
помог объект InvokationOnMock и метод doAnswer который его принимает. Я уверен есть и дургие способы, но это окалаось именно то что нужно бля вызова определенной лямбды/коллбека для замоканного дела

и InvokationOnMock одинаково работает как для лямбд, так и для классических коллбеков

Quantum Harmonizer
26.09.2017
10:03:53
и InvokationOnMock одинаково работает как для лямбд, так и для классических коллбеков
так а чем лямбда отличается от классического колбэка? :) инфасотка, что с method reference оно будет работать так же.

Nikita
26.09.2017
10:04:47
так а чем лямбда отличается от классического колбэка? :) инфасотка, что с method reference оно будет работать так же.
я может ошибаюсь, но разве это не является анонимным интерфейсом? если конечно такое понятие есть как таковое. + method reference разве это не о рефлексии?

Google
Nikita
26.09.2017
10:06:51
а то kotlin

но это уже кишки в которых, на самом деле надо бы по хорошему разобраться

Dmitry
26.09.2017
10:08:23
а то kotlin
который таки компилируется в байткод 1.6 или 1.8 (на выбор)?

Quantum Harmonizer
26.09.2017
10:08:44
насколько я помню, сейчас для обеих версий получаются анонимные классы

Nikita
26.09.2017
10:09:11
Нет, method reference — это как String::toCharArray
ты можешь обратиться законно к лямбде таким образом? Ну помимо argumentCapatora метода с лямбдой

Quantum Harmonizer
26.09.2017
10:09:58
ты можешь обратиться законно к лямбде таким образом? Ну помимо argumentCapatora метода с лямбдой
Что значит «обратиться к лямбде»? Давай условимся, что лямбда — это вид выражения, который существует только на уровне исходников.

Nikita
26.09.2017
10:10:16
насколько я помню, сейчас для обеих версий получаются анонимные классы
мне кажется тут требуется тестирование без ссылок на документацию. Каким образом вот его провести. Можно ексепшн пробросить и глянуть стектрейс. есть какие то более корректный способы?

Nikita
26.09.2017
10:13:39
kotlin/jvm/functions/Function1 - хм

Google
Quantum Harmonizer
26.09.2017
10:14:10
это функциональный интерфейс Котлина, их таких — 23 штуки

Nikita
26.09.2017
10:15:00
вообще выглядит интересно

LINENUMBER 209 L10 NEW WorkerCardPresenter$reserveBadCaseUser$1 DUP ALOAD 0 INVOKESPECIAL WorkerCardPresenter$reserveBadCaseUser$1.<init> (LWorkerCardPresenter;)V CHECKCAST kotlin/jvm/functions/Function1 L11

1 - это судя по всему сгненерированный в рантайме класс

Quantum Harmonizer
26.09.2017
10:16:41
Почему же в рантайме?

Nikita
26.09.2017
10:16:49
это функциональный интерфейс Котлина, их таких — 23 штуки
есть под рукой ссылка где можно с этим ознакомиться?

Dmitry
26.09.2017
10:16:49
? я чет не понимаю, или как может фраза "сгенерированный в райнтайме" сочетаться с просмотром байткода от компилятора?

Dmitry
26.09.2017
10:18:16
Если через Tools - Kotlin - Show bytecode (и затем decompile) смотреть, то в том же файле и будет описан данный анонимный класс

Quantum Harmonizer
26.09.2017
10:18:47
LINENUMBER 209 L10 NEW WorkerCardPresenter$reserveBadCaseUser$1 DUP ALOAD 0 INVOKESPECIAL WorkerCardPresenter$reserveBadCaseUser$1.<init> (LWorkerCardPresenter;)V CHECKCAST kotlin/jvm/functions/Function1 L11
Мне вот интересно, зачем там checkcast. Ведь на этапе компиляции и так известно, что это экземпляр Function1.

Nikita
26.09.2017
10:23:17
студия после декомпиляции байт кода в java даже об этом предупреждает

Quantum Harmonizer
26.09.2017
10:24:11
студия после декомпиляции байт кода в java даже об этом предупреждает
ну, если, например, Java-код с дженериками декомпилировать, там тоже будут бесполезные касты :)

хотя на деле они нужны

Nikita
26.09.2017
10:24:37
хм

я нашел эти 23 метода

что будет если использовать функцию с 23 аргументами?

да и...почему ограничение на 22 а не например 10

Quantum Harmonizer
26.09.2017
10:26:41
Google
Quantum Harmonizer
26.09.2017
10:26:52
Nikita
26.09.2017
10:27:11
ох уж этот сахар

Dmitry
26.09.2017
10:29:45
что будет если использовать функцию с 23 аргументами?
Бреслав про это говорил, мол потому что в скале так, и мы решили тоже. Очень редко когда тебе нужно больше аргументов да и то это уже ЭРЕБОР

Quantum Harmonizer
26.09.2017
10:33:08
https://youtrack.jetbrains.com/issue/KT-13764

Кто-нибудь может мне пояснить, как они собираются избавиться от 23-х классов? https://github.com/JetBrains/kotlin/blob/master/spec-docs/function-types.md

Dmitry
26.09.2017
10:39:09
Quantum Harmonizer
26.09.2017
10:43:13
invokedynamic?
Так эта инструкция о другом. И она пришла, кажется, в байт-коде версии 1.7.

Руслан
26.09.2017
10:51:13
ну почему, лямбды так работают в джаве

у тебя вместо аннонимного класса, прям в байткоде синтетический метод

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

Quantum Harmonizer
26.09.2017
10:57:12
у тебя вместо аннонимного класса, прям в байткоде синтетический метод
Этот метод превращается в реализацию интерфейса в рантайме с помощью lambdaMetaFactory, от использования интерфейсов при этом никто не уходит.

Руслан
26.09.2017
11:02:02
Хм, так они не отказываются на JVM от Function0-22

Это для других языков можно просто иметь виртуальные интерфейсы только в компиляторе, а вот для джавы будут эти интерфейсы + FunctionN с vararg

Quantum Harmonizer
26.09.2017
11:03:23
а, ок

Руслан
26.09.2017
11:04:01
> On JVM, introduce Function0..Function22, which are optimized in a certain way, and FunctionN for functions with 23+ parameters. When passing a lambda to Kotlin from Java, one will need to implement one of these interfaces.

> Introduce a physical class Function and unlimited number of fictitious (synthetic) classes Function0, Function1, ... in the compiler front-end

Quantum Harmonizer
26.09.2017
11:04:57
Но вроде теперь понял.

Igor
26.09.2017
11:06:05
А в чем профит безлимитного кол-ва аргументов в методе?

Google
Quantum Harmonizer
26.09.2017
11:06:34
Konstantin
26.09.2017
11:23:31
всем привет) только начал изучать котлин. Вопрос касается использования языка на андроид. В проекте использую kotlin-android-extensions для того чтобы можно обращаться на прямую ко вьхам. На textview хорошо работает, но на таких элементах как recyclerview и swipe refresh layout крашится кто знает в чем может быть дело?

Anton
26.09.2017
11:24:04
а лог не хочешь показать

Михаил
26.09.2017
11:24:39
интероп с god-функциями :)
Типа на 22 аргументе какой-то безумец не сможет остановиться?)

Konstantin
26.09.2017
11:24:55


Anton
26.09.2017
11:25:14
отлично видно)

ну ищи где нулл)

Konstantin
26.09.2017
11:26:30
дык нуль это recycler view которые не смог с инфлейтится

Igor
26.09.2017
11:26:35
Кажись это как-то связано с тем что код в фрагменте (но это не точно)

Konstantin
26.09.2017
11:27:08
ага в фрагменте. но с текствью то во фрагменте все хорошо работает

у меня и kotterknife также валился

именно recycler view, а вот с текствью все ок

Quantum Harmonizer
26.09.2017
11:28:31
именно recycler view, а вот с текствью все ок
скинь вёрстку и код фрагмента в pastebin / gist

Igor
26.09.2017
11:28:36
whalemare
26.09.2017
11:28:38
Может ты просто не из той view берешь?

Konstantin
26.09.2017
11:31:44
верстка https://pastebin.com/9eru510j фрагмент https://pastebin.com/x7gHrdTm

Quantum Harmonizer
26.09.2017
11:36:18
верстка https://pastebin.com/9eru510j фрагмент https://pastebin.com/x7gHrdTm
у тебя initViews() вызывается до того, как инфлейтится view

очевидно, ни ресайклера, ни любых других вьюшек во фрагменте на тот момент ещё нет

Откуда в Котлин-коде взялись аннотации @Nullable?

Google
Konstantin
26.09.2017
11:37:49
http://prntscr.com/gpv3nm

если так сделать то все равно крашится

Quantum Harmonizer
26.09.2017
11:38:13
если так сделать то все равно крашится
попробуй сделать это в onViewCreated

Konstantin
26.09.2017
11:38:29
import android.support.annotation.NonNull import android.support.annotation.Nullable

в котлин не принято ставить аннотации?

Михаил
26.09.2017
11:39:10
Из типа итак понятно

Maxim
26.09.2017
11:39:29
в котлин не принято ставить аннотации?
Просто знак вопроса в конце типа означает Nullable

Михаил
26.09.2017
11:40:17
Самое забавное что на скрине @NonNull ViewGroup?

Quantum Harmonizer
26.09.2017
11:40:58
нуллабельный LayoutInflater — зачем так жить?

whalemare
26.09.2017
11:41:23
Без нуллабельного любой дурак может

Konstantin
26.09.2017
11:41:40
оуу все заработало)

спасибо)

http://prntscr.com/gpv6q7

вот же аннотации

Quantum Harmonizer
26.09.2017
11:45:16
http://prntscr.com/gpv6q7
Котлин поддерживает эти аннотации на Java-классах

Konstantin
26.09.2017
11:47:09
аа, вообщем если параметр Nullable то ставим вопрос в конце если не нуль то ничего?

Konstantin
26.09.2017
11:52:10
супер, спасибо еще раз)

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