@kotlin_lang

Страница 932 из 982
Alexander
09.10.2018
08:07:38
Что, с тех пор как теормех закончился?

dimiii
09.10.2018
08:08:40
Coverage 101% ?
Надо нести добро в мир.

Google
Daniil
09.10.2018
08:10:41
Это все субъективщина и только
Субъективщина измеряется размером зарплаты ;)

Alexander
09.10.2018
08:11:39
Субъективщина измеряется размером зарплаты ;)
Прямо или обратно пропорционально?

Bogdan
09.10.2018
08:12:52
Субъективщина измеряется размером зарплаты ;)
Если мне будут платить куча бабок за написание кода на "так себе яп", я буду писать, но не буду говорить что он "прекрассен", я буду говорит как есть (субъективно)

Daniil
09.10.2018
08:14:36
Если мне будут платить куча бабок за написание кода на "так себе яп", я буду писать, но не буду говорить что он "прекрассен", я буду говорит как есть (субъективно)
Если не будут платить? Обычно те кому платят хорошо - им не до этого, в жизни много интересного, кроме срача.

Egor
09.10.2018
08:15:58
Да нет как бы, сейчас бы в 2018 тратить время на точки с запятыми в самых неожиданных местах

Не так уж субъективно

Daniil
09.10.2018
08:16:12
Konstantine
09.10.2018
08:26:35
Там вроде об идеальности речи нет. А то за бабки делать вид, что дерьмовая технология крута - какая то проституция:)

Andrey
09.10.2018
08:38:04
вот так проще: interface Test { val name: String } class TestData(override val name: String) : Test class TestProxy(var data: Test) : Test by data { init { val declaredFields = TestProxy::class.java.declaredFields val field: Field = declaredFields.find { it.name.contains("\$\$delegate") }!! field.isAccessible = true field.set(this, Proxy.newProxyInstance(TestProxy::class.java.classLoader, arrayOf(Test::class.java), { proxy, method, args -> method.invoke(data, *(args ?: arrayOf()))})) } } fun main(args: Array<String>) { val proxy = TestProxy(TestData("old")) println(proxy.name) proxy.data = TestData("new") println(proxy.name) } выводит: old new
Там на самом деле java.lang.reflect.Proxy не нужен. Я несколько переусложнил свой пример (изменение модификаторов у поля нужно только чтобы static final значение менять, для final достаточно setAccessible). Упрощённый вариант: fun main(args: Array<String>) { val proxy = TestProxy(TestData("old")) println(proxy.name) proxy.data = TestData("new") println(proxy.name) } interface Test { val name: String } class TestData(override val name: String) : Test class TestProxy(data: Test) : Test by data { var data: Test = data set(value) { delegateField.set(this, value) field = value } companion object { private val delegateField: Field by lazy { TestProxy::class.java.declaredFields .find { it.name.contains("\$\$delegate") }!! .apply { isAccessible = true } } } }

Google
Alexandr
09.10.2018
08:38:47
и там и там есть плюсы/минусы

Алексей
09.10.2018
08:41:07
А зачем data классы добавляют в класс componentN ?

Quantum Harmonizer
09.10.2018
08:41:45
А зачем data классы добавляют в класс componentN ?
https://kotlinlang.org/docs/reference/data-classes.html

dimiii
09.10.2018
08:41:49
А зачем data классы добавляют в класс componentN ?
для деструктурирования, вестимо

eshch
09.10.2018
08:49:31
И какой номер issue в YouTrack?
ну я не думаю, что с этого надо начинать. или этот норм? я думал тут пообсуждать, но как-то не зашло

Алексей
09.10.2018
08:50:55
классная штука

eshch
09.10.2018
08:52:58
Но аргументов ждут от ТЕБЯ, можешь идти создавать issue
ну перед тем как создать ишью хочется обсудить, это разве проблема? только почему-то каждый второй хочет тему закрыть

Alexander
09.10.2018
08:53:36
Каждый первый. По-моему сторонников не было

Собственно, обсуждение было избыточным.

dimiii
09.10.2018
08:54:11
Давайте что-то другое обсуждать

Alexander
09.10.2018
08:54:14
В смысле объема

Давайте что-то другое обсуждать
Я за! Нет времени читать сотни сообщений непонятно про что

Alexander
09.10.2018
08:59:20
Ради интереса. Как вам безаргументный main из Kotlin 1.3? (Считаете, что важно, пофиг или не понравилось) Немного схожа по идеологии фича с тем, что до этого обсуждали (loop в std-либе)

Alexander
09.10.2018
09:00:30
В принципе да, но не совсем, тоже не освсем нужно, но область применения сильно шире

Andrey
09.10.2018
09:01:41
Плюс к тому, безаргументный main не получится написать в виде однострочной ФВП, а бесконечный цикл - легко.

Alexander
09.10.2018
09:24:01
Щас компилировал проект, словил чего-то несусветное: e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation Cause: Back-end (JVM) Internal error: wrong code generated org.jetbrains.kotlin.codegen.CompilationException Back-end (JVM) Internal error: Couldn't transform method node: calculateLU (Lscientifik/kmath/operations/Field;)Lkotlin/Pair;: и километр байткода. Надо наверное писать issue, но не знаю с какого конца начать

Google
Mikhail
09.10.2018
09:26:09
а как лучше Array<Long>? привести к Array<Long?>?

Alexander
09.10.2018
09:26:42
Просто ясно, что ошибка не будет воспроизводится в простом случае. Ну кину ссылку на комит в гитхабе.

Quantum Harmonizer
09.10.2018
09:26:53
Mikhail
09.10.2018
09:26:56
а если мне надо?

Alexander
09.10.2018
09:27:00
Будет гарантированный дополнительный боксинг

Quantum Harmonizer
09.10.2018
09:27:06
а если мне надо?
непонятно, что именно надо

Mikhail
09.10.2018
09:27:09
пофиг на боксинг

Alexander
09.10.2018
09:28:03
Если надо лучше сделать лист, но если совсем приспичит, то можно map{it as Long?}.toTypedArray()

Mikhail
09.10.2018
09:28:05
мне нужно выполнять код для каждого айди из этого массива, если ничего нет, то один раз для null

Alexander
09.10.2018
09:29:06
Для нулябельных объектов массив делать не актуально. Все равно размещение на куче

Quantum Harmonizer
09.10.2018
09:29:18
Quantum Harmonizer
09.10.2018
09:31:19
другое поведение: if (arrayOfLongs.isNullOrEmpty()) runMe(null) else arrayOfLongs.forEach(::runMe)

Mikhail
09.10.2018
09:32:45
val ARRAY_OF_NULL: Array<out Any?> = arrayOf(null) ... (arrayOfLongs ?: ARRAY_OF_NULL).forEach(::runMe)
да, так будет работать, пасиба, я наверно еще не проснулся

Quantum Harmonizer
09.10.2018
09:33:00
да, так будет работать, пасиба, я наверно еще не проснулся
но только для пустого массива ничего не выполнится

Mikhail
09.10.2018
09:33:20
пустого быть не должно

массива не будет

dimiii
09.10.2018
09:38:17
Мечтаю о хорошей книге по корутинам. О Structured concurrency, о паттернах, с конкретными примерами и с нескучным обсуждением всех загадочных параметров в конструкторах и тд итп

Alexander
09.10.2018
09:39:11
Так рано еще книги писать, тут еще не все устоялось.

Google
Mikhail
09.10.2018
09:41:49
ок, нашел читаемый и работающий вариант

(places ?: arrayOfNulls<Long?>(1)).forEach({ })

меня смущает, что я не могу в переменную типа Array<Long?> положить Array<Long>

Bogdan
09.10.2018
09:43:35
ну перед тем как создать ишью хочется обсудить, это разве проблема? только почему-то каждый второй хочет тему закрыть
Что нам обсудить ? Мы говорим ненужно, ты нужно, мы тебе "а для чего, как часто используешь", ты "зачем мне пруфы давать". На этом все, извини

Mikhail
09.10.2018
09:44:30
это магия как называется?

Quantum Harmonizer
09.10.2018
09:44:44
в Java — ? extends Long

Mikhail
09.10.2018
09:46:31
т.е. Long наследуется от Long? ?

Quantum Harmonizer
09.10.2018
09:46:57
т.е. Long наследуется от Long? ?
грубо говоря — да, нуллабельный тип всегда шире, чем не-нуллабельный

Admin
ERROR: S client not available

Alexander
09.10.2018
09:49:10
А это работает? Массивы же вроде инвариантны. А почему именно масив, почему не список?

Quantum Harmonizer
09.10.2018
09:50:48
Alexander
09.10.2018
09:51:02
В котилне инвариантны

Quantum Harmonizer
09.10.2018
09:51:17
да, потому что массивы в котлине — дженерики

Alexander
09.10.2018
09:51:34
а, ну да

> Note: unlike Java, arrays in Kotlin are invariant. This means that Kotlin does not let us assign an Array<String> to an Array<Any>, which prevents a possible runtime failure (but you can use Array<out Any>, see Type Projections).

но непонятно зачем

Andrey
09.10.2018
09:52:05
Зато List в Kotlin ковариантен

Quantum Harmonizer
09.10.2018
09:52:15
но непонятно зачем
чтобы не бросать ArrayStoreException?

Google
Alexander
09.10.2018
09:52:16
ыменно

Алексей
09.10.2018
09:52:28
но непонятно зачем
Чтобы хранить что угодно

Alexander
09.10.2018
09:52:36
Там лонги

Алексей
09.10.2018
09:52:44
Зато List в Kotlin ковариантен
Потому что иммутабелен?

Quantum Harmonizer
09.10.2018
09:53:02
Потому что иммутабелен?
List ничего не гарантирует про иммутабельность

Andrey
09.10.2018
09:53:10
Sergey
09.10.2018
09:53:15
ktor 1.0 alpha тегнули?

Алексей
09.10.2018
09:53:28
List ничего не гарантирует про иммутабельность
Ну методов изменения списка там нет

Andrey
09.10.2018
09:53:36
List ничего не гарантирует про иммутабельность
Гарантирует. List в Kotlin не содержит изменяющих методов

Alexander
09.10.2018
09:53:41
есть MutableList

Алексей
09.10.2018
09:53:50
А если говорить о рефлексии - то вообще никто ничего не гарантирует

Andrey
09.10.2018
09:54:00
есть MutableList
А он инвариантен

Quantum Harmonizer
09.10.2018
09:54:05
List при этом вполне может быть MutableList, который изменяет кто-то другой

это как val, который тоже не про иммутабельность

Алексей
09.10.2018
09:54:44
List при этом вполне может быть MutableList, который изменяет кто-то другой
Той части функционала, которая знает его как List это должно быть по барабану:)

Alexander
09.10.2018
09:55:17
Я вообще не про это. @Wizzardo хочет писать в массив 'Long?'. Не нонятно зачем. Списки для этого удобнее

Quantum Harmonizer
09.10.2018
09:55:40
Той части функционала, которая знает его как List это должно быть по барабану:)
Нет. Та часть должна понимать, что в любой момент всё изменится, если не скопировать его к себе.

Andrey
09.10.2018
09:56:15
List при этом вполне может быть MutableList, который изменяет кто-то другой
Ну тут идея в том, что так как использующий List может из него только читать, то можно List сделать ковариантным. Читатель - ковариант, так как потребитель супер типа может потреблять и тип. Писатель - контравариант, так как в роли производителя типа можно использовать производитель подтипа. Читатель + писатель - инвариант

Алексей
09.10.2018
09:56:19
Нет. Та часть должна понимать, что в любой момент всё изменится, если не скопировать его к себе.
Это должна понимать любая часть, работающая с данными, скрытыми на интерфейсом

Bogdan
09.10.2018
09:56:30
Quantum Harmonizer
09.10.2018
09:57:01
Вопрос где тогда она ?
Ну это по коду смотреть надо :)

unmodifiableList(ArrayList(someList)) — вот она

Mikhail
09.10.2018
09:57:26
Я вообще не про это. @Wizzardo хочет писать в массив 'Long?'. Не нонятно зачем. Списки для этого удобнее
мне в запросе приходит список айдишников, пофиг массив или лист, если параметра нет, то там null

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