
Roman
16.09.2018
13:12:28
Не надо сложных решений override fun toString() = secure(super.toString()) выглядит понятней

Igor
16.09.2018
13:12:46

Mikhail
16.09.2018
13:13:01

Roman
16.09.2018
13:13:37

Google

Mikhail
16.09.2018
13:14:13

OlegKrikun
16.09.2018
13:15:13

Mikhail
16.09.2018
13:15:15
можешь реально почикать все toString, только можно в рантайме получить где-нибудь на UI "ты чего залез в декомпилятор, падла?" если быть неаккуратным

Igor
16.09.2018
13:15:47

Quantum Harmonizer
16.09.2018
13:16:44
мне кажется, что по-хорошему нужен способ вырезать все toString() так же, как обычно вырезают логи в релизных сборках.

Mikhail
16.09.2018
13:17:21

Alexander
16.09.2018
13:19:06
Не подоспел к спору про кортежи. У меня к ним старая нелюбовь. Их очень любят в Питоне и руте, причем в действительности все от бедности. В питоне - потому что там объектная поддержка вообще слабая, а в руте - потому что С++ в самой монструозной ипостаси. Вообще не вижу смысла их использовать в человеческом языке. Map.Entry еще иногда встречаются, Максимум пары, тройки - уже не бывают.
А сейчас они всем нужны просто по привычку, как же так, в питоне-то есть

Roman
16.09.2018
13:19:53
По моему опыту правильно написанные toString это как раз то, что saves your ass когда что-то упало на prod, ну а секурные части (типа паролей и personaly identifyiable information) заменяются на ***
Ну а если какая-то security паранойся и никаких toString и никаких логов быть не должно, то тогда наверное действительно проще написать трасформер который все выпиливает для prod сборку. Уже очень это доменно-специфичный случай

Igor
16.09.2018
13:21:30
Умел бы это proguard делать, вопросов бы никаких не было к котлину

Quantum Harmonizer
16.09.2018
13:21:43

Alexander
16.09.2018
13:21:46

Google

Alexey
16.09.2018
13:22:49

Roman
16.09.2018
13:22:51

OlegKrikun
16.09.2018
13:23:41
Мапинги от прогуарда потерял наверное =)

Alexander
16.09.2018
13:24:27
а что не так в питоне с объектной моделью?
С точки зрения человека, привыкшего к нормальному ОП - криво и странно. Питон просто не располагает писать объектно, он больше процедурно ориентированный. Я знаю, что на нем можно делать все объектно. Ну и на Java можно делать все функционально, но не удобно, поэтому и не делают.

Quantum Harmonizer
16.09.2018
13:24:46

Igor
16.09.2018
13:27:32

Phil
16.09.2018
13:27:37

OlegKrikun
16.09.2018
14:09:13
Так, чо то я запутался ? какую версию kotlinx.coroutines пихать в зависимости для котлин 1.3М2?
UPD: 0.26.0-eap13 ???

Quantum Harmonizer
16.09.2018
14:11:35

Mikhail
16.09.2018
14:19:38

Roman
16.09.2018
14:23:21

Mikhail
16.09.2018
14:28:46
Я восхищаюсь ребятами из JB, какой надо силой воли обладать, чтобы столько всяких блестяшек не затянуть в язык
Не очень понимаю фразу "специализировать под конкретный тип"


Roman
16.09.2018
14:32:45
Ну просто такой inline на стероидах. Сначала делаем inline, потом видим что код, которые там через reflection идет по всем полям и считает общий hashcode на самом деле зависит от списка полей класса который на уже известен во время компиляции (мы ведь сделали inline в конкретный класс), поэтому можно статические известные значения и ссылки на все поля воткнуть, цикл по полям раскрыть. Получится в итоге ровно такой же код, как бы если бы мы делали для этого intrinsic в компиляторе. А так никакого intrinsic не надо. Если кому-то надо, то он сможет написать свою версию "шаблона" для toString или hashCode или еще чего угодно.
Но это всё мечты. В ближайшем будущем ничего такого появиться не может. Инфраструктура компилятора не готова. Надо на IR сначала первести всё

Igor
16.09.2018
14:33:47

Mikhail
16.09.2018
14:35:51

Igor
16.09.2018
14:35:53

Roman
16.09.2018
14:36:35
^^ OH GOD NO! Как вы для макросов tooling всякий будете делать? Ответ — как в Scala, то есть ни как или с большми матюгами

Google

Roman
16.09.2018
14:37:32
Я же здесь предлагаю обычные inline fun только чуть по мощней. И все обычные механизмы работы с функциями с ними работают как обычно

Mikhail
16.09.2018
14:38:10

Igor
16.09.2018
14:38:57

Roman
16.09.2018
14:40:18
Как в lombok дать свой формат toString? Только через вагоны параметров (настроек) которые захародкожены в Lombok. Получается какой-то особенный язык описания функция toString. Я же предлагаю, чтобы каждый мог иметь возможность написать свой toString на языке Kotlin

Alexander
16.09.2018
15:47:36
А зачем вообще нужен какой-то мощный арсенал для toString?

dimiii
16.09.2018
16:06:36
Так. Я опоздал на священную войну. Но все же, вброшу пару фактов, которые не опровергнуть. Дата классы нужнее, чем кортежи, хотя бы потому что есть возможность делать осмысленные проекции. Недаром же даже в языке с кортежами и сравнением образцов завезли record syntax.
Всему можно дать имя, пусть и неуклюжее - типа StepNameResult
Да и по сути - кортежи это дата классы бедного человека

Igor
16.09.2018
16:07:51

Bogdan
16.09.2018
16:08:45

Phil
16.09.2018
16:09:31

Alexander
16.09.2018
16:10:15

Bogdan
16.09.2018
16:10:36

Alexander
16.09.2018
16:10:49
Из питона тоже пытаются сделать перл
Так что он выше в смысле эволюции

Igor
16.09.2018
16:12:09
а пример реального использования кортежа ?
Да без проблем:
1) паттерн-матчинг, который у меня есть, и меня бесит оборачивать в TupleN матчащиеся значения, приговаривая "больше скобок богу скобок"
2) Внедрение зависимостей (ну, опять же, такое скорее всегоо в проде у меня и пары-тройки таких же как я: https://gist.github.com/komigor/f795381cad13352b0c62946a6b1e0dae)
3) По вашим пожеланиям, есть еще несколько кейсов, если нужно – вкину.


Alexander
16.09.2018
16:14:18
Ваш паттерн матчинг - это ваш собственный способ убиться об стену. Во-первых, много раз уже говорилось, что в котлине он не нужен, во- вторых, он у вас исходно сделан таким образом, чтобы работать на туплах. Внедрение зависимостей в общем случае вообще к туплам отношениея не имеет, там наоборот именованные поля более актуальны.
Почему кстати не используете нетипизированные сеты? вот вам туплы в чистом виде. Статической типизации нет, ну и хорошо, все равно в тупле размерности больше трех ее использовать невозможно

Google

Bogdan
16.09.2018
16:15:46
Да без проблем:
1) паттерн-матчинг, который у меня есть, и меня бесит оборачивать в TupleN матчащиеся значения, приговаривая "больше скобок богу скобок"
2) Внедрение зависимостей (ну, опять же, такое скорее всегоо в проде у меня и пары-тройки таких же как я: https://gist.github.com/komigor/f795381cad13352b0c62946a6b1e0dae)
3) По вашим пожеланиям, есть еще несколько кейсов, если нужно – вкину.
ну окей, опиши проблему (реальные, для прода) которую решили кортежи, и нельзя было решить подругому


Alexander
16.09.2018
16:17:16
Туплы - это вообще синтаксический сахар ранних языков, причем довольно убогий. Для того, чтобы с ними делать что-то разумное, к ним должно прилагаться описание формата, а тогда это уже недо-датаклассы.
Насмотрелся я на это в руте. Они там еще и сериализацию туплов делают. Получается, если что, мрак и жуть.

Bogdan
16.09.2018
16:18:40

Alexander
16.09.2018
16:19:18
Это не ЯП, это платформа церновская: https://root.cern.ch/
Программистам смотреть осторожно, глаза вытекут

Phil
16.09.2018
16:20:24
(Мне это напоминает один большой java-проект, который делал perl senior, а мне пришлось сопровождать. На входе из полученного xml делался hashmap (с вложенными hashmap), который потом проходил через пару сотен функций, превращался опять в XML и отдавался в верстку. Мы это рефакторили года три).

Andrey
16.09.2018
16:21:18

Admin
ERROR: S client not available

Alexander
16.09.2018
16:22:02
Матлаб шибко медленный. Кроме того, эта штука старше. Ну и лицензии
Не поверете, но на этом весь ЦЕРН работает поголовно и не только

Igor
16.09.2018
16:23:21

Alexander
16.09.2018
16:23:22
Так вот. Там туплы очень любят, вместо таблиц сплошные списки туплов

Quantum Harmonizer
16.09.2018
16:33:30

Igor
16.09.2018
16:54:39

Алексей
16.09.2018
17:00:34

Mi
16.09.2018
17:03:03
Чистое - не значит удобное и практичное

Алексей
16.09.2018
17:04:20
Если говорить про ооп - практичное, но не во всем удобное
Я точно могу сказать, что инкапсуляция через интерфейсы всего - это очень практично, но мало кем практикуется на уровне полного внедрения

Google

Igor
16.09.2018
17:07:04

Алексей
16.09.2018
17:07:25

Igor
16.09.2018
17:08:14

Igor
16.09.2018
17:08:16
ИМХО, мне например оптика в проекте код сделала куда более читаемым и сократила его раза в два. Особенно presentation слой.

Алексей
16.09.2018
17:09:27
Оптика?

Bogdan
16.09.2018
17:11:43

Mikhail
16.09.2018
17:13:25

Igor
16.09.2018
17:13:37

Igor
16.09.2018
17:14:50

Алексей
16.09.2018
17:14:54
Имхо, независимо от либ и прочего, если код невозможно читать - либо это хитрожопый костыль, либо он плохо написан

Bogdan
16.09.2018
17:14:56
ничиго не имею против фп

Igor
16.09.2018
17:16:49
?? интересный подход (джобсекьюрити зашкаливает)
Ну, то есть, я там планирую быть еще долго, вики по проекту будет писаться по его закрытию, детальная, с описанием всех концепций и полной документацией. Если после этого кто-то не сможет поддерживать код – это уже клиника же :)

Mikhail
16.09.2018
17:16:52
это от популярности технологии зависит - хороший пример - Rx. В андроиде сейчас я не видел ни одного продового проекта без Rx. А на IOS знакомые говорили, что боятся внедрять, чтобы не приходилось обучать долго разработчиков
кстати, набросал тут gist про паттерн-матчинг на ComponentN https://gist.github.com/Mishkun/9430a6740858876895c1eb0f870b7a59

Igor
16.09.2018
17:25:51

Igor
16.09.2018
17:29:57

Mikhail
16.09.2018
17:32:55
так ты можешь свой data class просто пометить интерфейсом ComponentN
сами методы же котлин генерит

Igor
17.09.2018
08:46:43
Может кто сказать, будет ли это работать? (см gson.kt внутри функцию serializersFix)
https://gist.github.com/komigor/548820a0a6008fb0e725ca00afdcb3a1

Friedrich
17.09.2018
08:51:41