@kotlin_lang

Страница 868 из 982
Quantum Harmonizer
16.09.2018
12:15:56
У кого-нибудь сломался буфер обмена в последней IDEA EAP?

OlegKrikun
16.09.2018
12:31:30
Толко мне не хватает возможности передать кортеж в метод? типа: fun do(value: (String, Int, ...))

Google
OlegKrikun
16.09.2018
12:31:58
да у меня уже даже Five определён

вот хотелось бы без вот этого всего

Roman
16.09.2018
12:32:10
Напиши data class строчкой выше и читатели твоего кода скажут тебе спасибо

Quantum Harmonizer
16.09.2018
12:32:19
ext.kotlin_version = '1.3-M2' ... maven { url 'https://dl.bintray.com/kotlin/kotlin-eap/' } Could not find org.jetbrains.kotlin:kotlin-stdlib:1.3.0-rc-6. ЧЯДНТ?

Roman
16.09.2018
12:32:50
Не надо экономить сточку кода на data class. Понятность кода превыше всего

Quantum Harmonizer
16.09.2018
12:33:18
OlegKrikun
16.09.2018
12:33:28
Не надо экономить сточку кода на data class. Понятность кода превыше всего
тут возникает проблема нейминга =)))) а передача кортежа бы её решила =))))

Mi
16.09.2018
12:33:40
Не надо экономить сточку кода на data class. Понятность кода превыше всего
оно то да, но когда речь уже о кортежах разрядности 5+, там не строчка кода, а 6 строчек

Andrew
16.09.2018
12:34:32
ext.kotlin_version = '1.3-M2' ... maven { url 'https://dl.bintray.com/kotlin/kotlin-eap/' } Could not find org.jetbrains.kotlin:kotlin-stdlib:1.3.0-rc-6. ЧЯДНТ?
Посмотри по ./gradlew :...:dependencies, что потянуло за собой rc, в качестве хотфикса можешь рядом с kotlin-eap добавить kotlin-dev.

Roman
16.09.2018
12:34:40
тут возникает проблема нейминга =)))) а передача кортежа бы её решила =))))
Это не проблема. Если ты не можешь назвать ЭТО, то есть повод задумать что ты вообще делаешь

Да и сам себе скажешь спасибо, если назовешь, ибо человеческий мозг так устроен что ему проще оперировать понятиями у которых есть какие-то имена. Поэтому люди и называют все предметы и явления вокруг себя. Без имен нельзя ими манипулировать

Bogdan
16.09.2018
12:36:56
Это не проблема. Если ты не можешь назвать ЭТО, то есть повод задумать что ты вообще делаешь
я думаю проблема не в наименовании, а в том что люди просят кортежи ?

Google
Roman
16.09.2018
12:37:51
я думаю проблема не в наименовании, а в том что люди просят кортежи ?
Это какой-то фундаментальный пробел в образовании программистов и наша фундаментальная миссия (я считаю) его закрыть.

Quantum Harmonizer
16.09.2018
12:38:46
Посмотри по ./gradlew :...:dependencies, что потянуло за собой rc, в качестве хотфикса можешь рядом с kotlin-eap добавить kotlin-dev.
собственно releaseCompileClasspath - Compile classpath for compilation 'release' (target (androidJvm)). +--- org.jetbrains.kotlin:kotlin-stdlib:1.3-M2 -> 1.3.0-rc-6 FAILED

Mi
16.09.2018
12:39:08
Это какой-то фундаментальный пробел в образовании программистов и наша фундаментальная миссия (я считаю) его закрыть.
я конечно всеми руками против кортежей, но они бы такую популярность не обрели бы, будь они ошибкой

OlegKrikun
16.09.2018
12:39:12
Это не проблема. Если ты не можешь назвать ЭТО, то есть повод задумать что ты вообще делаешь
Та я шутил про нейминг +) Если серёзно, кортежи бы действительно не помешали, для всяких экстеншен функций очень бы пригодились

Mikhail
16.09.2018
12:39:40
Mi
16.09.2018
12:39:50
на php бы тоже тогда никто не писал :)
ну это уже вброс какой-то

сразу хочется начать холивар

OlegKrikun
16.09.2018
12:40:15
Andrew
16.09.2018
12:40:51
собственно releaseCompileClasspath - Compile classpath for compilation 'release' (target (androidJvm)). +--- org.jetbrains.kotlin:kotlin-stdlib:1.3-M2 -> 1.3.0-rc-6 FAILED
Это значит, что затребована версия 1.3-M2, а по факту использована 1.3.0-rc-6. Виноват в этом кто-то другой.

Boris
16.09.2018
12:40:59
Иногда кортежи хорошо играют, когда например есть большая цепочка мапредьюс то из одной фазы в другую иногда приходится передавать совершенно неназываемые наборы

Quantum Harmonizer
16.09.2018
12:41:21
Это значит, что затребована версия 1.3-M2, а по факту использована 1.3.0-rc-6. Виноват в этом кто-то другой.
А кто?) так-то это пустой проект, ничего нет, а никак собрать не могу

Roman
16.09.2018
12:41:26
Я бы и Pair выпилил. Очень редко в реальной жизни приходится манипулировать парой элементов с названиями first и second. Чаще всего, если где и возникает пара, то у элементов этой пары есть какие-то более подходящие имена.

Mikhail
16.09.2018
12:41:30
Напиши data class строчкой выше и читатели твоего кода скажут тебе спасибо
Кстати о data class, почему нет интерфейса ComponentN? Уже же ведь и так componentN() генерятся. Столько всякого можно было бы провернуть, от паттерн-матчинга до превращения дата-классов в кортежи и обратно

Roman
16.09.2018
12:41:56
Вот для того и нету, чтобы вот этого всего не было

Roman
16.09.2018
12:43:04
Даже используя Pair и Triple можно написать абсолютно непонятный стороннему читателю код (я лично видел), но так хотя бы масштаб того, что можно наворотить, сильно ограничен

Andrew
16.09.2018
12:43:37
А кто?) так-то это пустой проект, ничего нет, а никак собрать не могу
А ты пытаешься новый multiplatform плагин юзать? Он точно сам диктует версию котлина, но я не искал, как её переопределить -- там фигурирует languageSettings по сорцам, но я не видел, как это встраивается в экстеншн kotlin.

Google
Andrew
16.09.2018
12:44:13
Roman
16.09.2018
12:44:47
Тут вопрос в приоритех. Мой опыт говорит, что читаемось и понятность кода намного важней лишнего класса в 99.99% случаев. А если у вас какой-то экзотический очень performance-critical случай, то может лучше вообще на C писать.

Boris
16.09.2018
12:45:24
Даже используя Pair и Triple можно написать абсолютно непонятный стороннему читателю код (я лично видел), но так хотя бы масштаб того, что можно наворотить, сильно ограничен
Можно да, при этом достаточно прозрачно такое использование если ты возвращаешь набор из одной лямбды и сразу деструктурируешь в другой.

Это не повод делать кортежи, но надо признать, что такой кейз есть

Quantum Harmonizer
16.09.2018
12:46:20
Тут вопрос в приоритех. Мой опыт говорит, что читаемось и понятность кода намного важней лишнего класса в 99.99% случаев. А если у вас какой-то экзотический очень performance-critical случай, то может лучше вообще на C писать.
Так уж получается в андроиде, что каждый добавленный класс влияет на размер приложения и занимает место в не-резиновом словаре. Так что я за inline-класс над Pair или массивом.

Roman
16.09.2018
12:47:02
А зачем деструктурировать? Ну вот практические никогда же не бывает "просто пара". Если вдуматься, то навреняка выясниться что это какая-то сущность и можной её дать имя, и хранить её в переменной и работать с ней номрально. Приведите пример, вместе разберем что это за сущность и как её назвать

А еще, на практике, такая сущность редко встречается только в одном месте.

Quantum Harmonizer
16.09.2018
12:48:13
inline над массивом... хм.. ?
да, DTO без класса ?

Mikhail
16.09.2018
12:48:26
Без надобности придумывать с потолка названия для промежуточных стадий данных

Roman
16.09.2018
12:49:02
А можно и весьма понятный
Это очень сложно. Чтобы было понятно надо вагоны документации писать или давать длинные имена методам типа getSomethingAndSomethingElse

Boris
16.09.2018
12:49:44
Такою пару никак не назвать, это просто чтобы было оба значения

Mikhail
16.09.2018
12:51:11
А еще, на практике, такая сущность редко встречается только в одном месте.
так для такого и существует Pair и Triple. Каждый раз когда встречаешь функциональную обработку коллекций или,например, Rx, могут встретится юзкейсы для этого, zip-ы там всякие, промежуточные структуры. Все то, что не выходит за пределы пары строк, в которых оно написано

Quantum Harmonizer
16.09.2018
12:51:51
Rx — это вообще вершина запутанности кода :)

Roman
16.09.2018
12:51:56
Ой... ой.. Это очень больной способ программирования, извните. Он совсем не трансформируется на длинные цепочки пробразований. А вдруг вам понадобиться что-то что было в начале цепочки? Теперь будет добавлять еще один элемент в кортеж на каждом этапе. Да, вот отсюда действительно торчит желание иметь кортежи, но так не надо вообще писать код

Mikhail
16.09.2018
12:52:11
Я против того чтобы возвращать Pair или Triple из метода, но во всяких обобщенных функциях работают только обобщенные структуры

Quantum Harmonizer
16.09.2018
12:52:11
Rx — это вообще вершина запутанности кода :)
щас мне скажут «смотря как писать» и будут правы

Google
Quantum Harmonizer
16.09.2018
12:54:09
собственно releaseCompileClasspath - Compile classpath for compilation 'release' (target (androidJvm)). +--- org.jetbrains.kotlin:kotlin-stdlib:1.3-M2 -> 1.3.0-rc-6 FAILED
Дичь. Победил так: implementation("org.jetbrains.anko:anko-sdk25:$anko_version") { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' } implementation("org.jetbrains.anko:anko-design:$anko_version") { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' }

Mikhail
16.09.2018
12:54:34
Окей, хорошо, для туплей нельзя использовать ComponentN, а для паттерн-матчинга?

Roman
16.09.2018
12:55:06
Да всё понятно про Spark и про big data. Хотите правильно distributed вычисления — придется платить удобством и читабельностью кода. Только не надо эти приемы применять там, где они не нужны

Quantum Harmonizer
16.09.2018
12:55:26
Окей, хорошо, для туплей нельзя использовать ComponentN, а для паттерн-матчинга?
а какая котлину разница, что там удобно для патмата?)

Admin
ERROR: S client not available

Mikhail
16.09.2018
12:56:19
можно написать Pattern, работающий с CompoentN и оператор .contains() и получить красивенкую when (user) { in User("johnDoe", any()) -> ... in User(any(), 13) -> ... else -> .... }

Quantum Harmonizer
16.09.2018
12:56:51
write-only

Roman
16.09.2018
12:57:09
Не надо вам pattern matching. У вас есть strongly typed language with nominal type system and flow sensitive typing. Пользуйтесь.

Это вам не Erlang и даже не JS.

Quantum Harmonizer
16.09.2018
12:57:23
сравни с when { user.name = "johnDoe" -> ... user.age == 13 -> ... else -> ... }

Boris
16.09.2018
12:57:40
Да всё понятно про Spark и про big data. Хотите правильно distributed вычисления — придется платить удобством и читабельностью кода. Только не надо эти приемы применять там, где они не нужны
Ну а чем заменить передачу пары между двумя шагами обработки сиквенса? Лично я часто пишу такие цепочки и не знаю просто и быстрого способа это сделать без них

Mikhail
16.09.2018
12:57:42
Roman
16.09.2018
12:58:09
Ну а чем заменить передачу пары между двумя шагами обработки сиквенса? Лично я часто пишу такие цепочки и не знаю просто и быстрого способа это сделать без них
Не надо заменять. Не надо так вообще писать код. Дайте пример где это надо, я покажу как переписать, чтобы не было нужно

Mikhail
16.09.2018
12:59:44
но вообще да, PM без destructive declaration все равно будет недостаточно приятным, чтобы предпочесть его

Roman
16.09.2018
13:00:03
Как только возникает желание где-то в цепочке сделать tupple это сразу сигнал что надо переделать на comprehensions/builder стиль

Google
Roman
16.09.2018
13:01:39
Цепные преобразование (filter/map/...) удобны только пока они делают шаблонные, простые задачи. Как только возникет сложная задача, то, даже если её решение и можно упихнуть в такой стиль, то результат будет очень трудно понять. Не надо так делать

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

Igor
16.09.2018
13:04:24
Roman а вы не знаете, не ли планов (запросов) - добавить в компилятор флажочек, что бы у data классов НЕ генерировался toString()? (это иногда важно, по секьюрити причинам).

OlegKrikun
16.09.2018
13:05:32
я думаю он знает как решить эту проблему

Quantum Harmonizer
16.09.2018
13:05:35
...или не использовать data-классы

Igor
16.09.2018
13:05:38
а овверайднуть слабо?
Так не во всех же 100 классах так делать, да и для дебага оно полезно.

Mikhail
16.09.2018
13:06:44
и там что то вроде if(isDebug) { super.toString} else {"мы на продакшене, тут не на что смотреть"}

а не

Igor
16.09.2018
13:07:47
Mikhail
16.09.2018
13:07:48
из делегата же нет доступа

Quantum Harmonizer
16.09.2018
13:08:08
Mikhail
16.09.2018
13:08:18
Igor
16.09.2018
13:09:24
А что там с ASM? Есть удачный опыт?
https://gist.github.com/komigor/3c8bbb733389250aea2c6b703d08d8ae проще некуда, выглядит опpятно

Igor
16.09.2018
13:10:34
https://gist.github.com/komigor/3c8bbb733389250aea2c6b703d08d8ae проще некуда, выглядит опpятно
data class SoSecure(val a: String, val b: String) : Stringifyable by SecureStringifyable ну такоооооооооое

Mikhail
16.09.2018
13:10:36
ASM - оно как Tuple. Если тебе вдруг будет лень что-то делать и ты решишь воспользоваться ASM, то огребаешь код, который нельзя прочесть и отдебажить, потому что до байтвейвинга его не существует

Igor
16.09.2018
13:11:07
так super же не вызовется
вот только что сам решил оттестить и смекнул, в чем корень зла

Mikhail
16.09.2018
13:11:15
из делегата же нет доступа

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