
Igor
06.12.2017
11:42:20

BaLoo
06.12.2017
11:42:45
Дата-классам не генерируется оператор проверки на меньше?

Quantum Harmonizer
06.12.2017
11:43:15

BaLoo
06.12.2017
11:43:40
Ээ... То же самое можно сказать и про equality.

Google

Quantum Harmonizer
06.12.2017
11:43:55

BaLoo
06.12.2017
11:44:06
Ясно, спасибо.

Igor
06.12.2017
11:44:16

BaLoo
06.12.2017
11:44:34
Видел, я знаю, что оно умеет сравниваться по адресам по-умолчанию.
Просто не считаю это правильным поведением для data-классов.

Gor
06.12.2017
11:45:23

BaLoo
06.12.2017
11:46:02
Зачем реализовывать его заведомо неправильным способом для 80% случаев?

Quantum Harmonizer
06.12.2017
11:46:15

BaLoo
06.12.2017
11:46:22
Компейр.

Quantum Harmonizer
06.12.2017
11:46:43

BaLoo
06.12.2017
11:47:02
А. Сорри, я про equal.

Quantum Harmonizer
06.12.2017
11:47:43
Если дата-класс содаржит примитивы, строки и дата-классы, то всё правильно.

Igor
06.12.2017
11:48:17
Видел, я знаю, что оно умеет сравниваться по адресам по-умолчанию.
У тебя есть два реальных варианта (и даже IDEA сама предлагает их)
1)
data class StrData(var data: String) {
operator fun compareTo(other: StrData): Int =
data.compareTo(other.data)
}
2)
operator fun StrData.compareTo(other: Example8.StrData): Int =
data.compareTo(other.data)

Google

BaLoo
06.12.2017
11:48:24
Тогда было бы классно, если бы он умел брат их реализацию и для сравнения на меньше.
Я хочу, чтоб это делал сам язык.
Увы.

Igor
06.12.2017
11:49:13
Я хочу, чтоб это делал сам язык.
Расскажи мне как он это сделает для?
data class StrData(var data: Thread)
Или для дву и более полей (из которых половина nullable)
data class StrData(var data: String, val value: Int?)

Quantum Harmonizer
06.12.2017
11:49:30
https://youtrack.jetbrains.com/issue/KT-8466

BaLoo
06.12.2017
11:50:26

Gor
06.12.2017
11:51:27
очень не очевидно

BaLoo
06.12.2017
11:51:41
А как ещё?

Gor
06.12.2017
11:51:50
ну сам подумай
поменялась у тебя логика
теперь нужно компейр делать в другом порядке

BaLoo
06.12.2017
11:52:22
Описываешь его ручками.

Gor
06.12.2017
11:52:26
что делать в таком случае? переопределять или менять/добавлять конструктор
ну вот видимо решили такую путаницу не делать

BaLoo
06.12.2017
11:52:45
Но уметь как-то сортировать элементы по-умолчанию было бы неплохо.

Quantum Harmonizer
06.12.2017
11:54:18

Google

BaLoo
06.12.2017
11:55:03
Как-то - не значит не очевидно.

Igor
06.12.2017
11:56:33

BaLoo
06.12.2017
11:57:53
В моём понимании существование equals и отсутствие compare - полный бред.

Руслан
06.12.2017
11:59:33
compare прямо в объекте - полный бред
хочешь сравнивать - пиши компоратор
или заветы effective java забыты?

Quantum Harmonizer
06.12.2017
12:00:11

Kirill
06.12.2017
12:00:19
преставь такой кейс: автор библиотеки предоставляет data class, где все поля Comparable, компилятор генерирует метод compareTo
ты на это закладываешься и радуешься жизни
в следующей версии библиотеки автор доавбялет новое поле с дефолтным значеним (для обратной совместимости)
но тип уже не Comparable

Igor
06.12.2017
12:00:51

Kirill
06.12.2017
12:00:58
метод compareTo пропадает
твой код ломается

Quantum Harmonizer
06.12.2017
12:01:14

Руслан
06.12.2017
12:01:26

Igor
06.12.2017
12:01:40

Kirill
06.12.2017
12:01:41
это будет означать что автор библиотеки на каждый data class должен писать тест
что он comparable

Google

Руслан
06.12.2017
12:01:56

BaLoo
06.12.2017
12:02:27

Руслан
06.12.2017
12:02:29

Quantum Harmonizer
06.12.2017
12:03:01

Igor
06.12.2017
12:04:57

Quantum Harmonizer
06.12.2017
12:05:19

Kirill
06.12.2017
12:07:00
Из-за того что кому-то может понадобиться два критерия равенства все должны явно его передавать.
Так себе.

Phil
06.12.2017
12:08:03
Ну, вообще очевидного равенства или очевидного сравнения почти никогда не бывает.
Полагаться на порядок полей в описании - это полный ужас.

Igor
06.12.2017
12:08:06

Admin
ERROR: S client not available

Quantum Harmonizer
06.12.2017
12:08:24

Руслан
06.12.2017
12:08:29
Как это дебажный? Я может хочу в console logger делать человеко понятный toString, а в file logger - json-like
нужно тоже передавать реализацию конкретную везде

Phil
06.12.2017
12:09:37
Ну, тогда пиши разные методы и передавай их явно.
А стандартный toString - для дебага )
Но вообще не хватает хитрых средств обеспечения code style. Типа, если в code style есть стандарт на наличие в каждом классе домена двух вариантов toString, то как проверить это при сборке проекта?
Аналогично - если у меня запрещено использовать встроенные синглтоны или глобальные переменные - то тоже хочется это проверять на этапе сборки проекта, а не через code review )

Quantum Harmonizer
06.12.2017
12:14:35

Phil
06.12.2017
12:17:10
Статические анализаторы под такие задачи не настроишь (
Это скорее отдельный инструмент, заточенный именно под kotlin и интегрированный с Idea.
Но если что-то из этого уже есть - то буду рад )
Интерфейс - оно понятно, но как гарантировать, что все созданные в проекте классы его реализуют )

BaLoo
06.12.2017
12:18:26
Мне кажется, все пришли к мысли, что золотой пули не бывает. А попытки сделать полностью универсальное решение приведут к необходимости передачи той или иной реализации для каждого чиха.
Так может быть всё-таки лучше решать большую часть проблем максимально простым способом, и только в редких случаях городить огород?

Google

Phil
06.12.2017
12:21:32
Этим путем шли многие языки, результат плачевный.
Из прекрасного в истории - в некоторых языках переменные i,j,k всегда были только integer, они же обычно используются в циклах )
Но вообще универсального решения для сравнения вообще не бывает.

Igor
06.12.2017
12:22:01

Kirill
06.12.2017
12:23:27

BaLoo
06.12.2017
12:26:06
Как мне кажется, идея смотреть на элементы data-класса, и предоставлять реализацию compare, когда в каждом из них он определён - скорее полезная вещь, чем нет. Мы ведь ни в чём при этом не ограничиваем пользователя класса.

Руслан
06.12.2017
12:26:39

Gor
06.12.2017
12:26:47

Quantum Harmonizer
06.12.2017
12:27:18
чито?
равны ID; равно содержание; равны контекстно-зависимые метаданные

BaLoo
06.12.2017
12:29:54

Quantum Harmonizer
06.12.2017
12:30:37

Gor
06.12.2017
12:31:02

BaLoo
06.12.2017
12:31:24

Quantum Harmonizer
06.12.2017
12:32:04

Gor
06.12.2017
12:32:33

Quantum Harmonizer
06.12.2017
12:34:01

Gor
06.12.2017
12:34:18

Quantum Harmonizer
06.12.2017
12:34:49

Gor
06.12.2017
12:34:51
поспешил) сферическому не нужны
нашему - нужны
от этого и едем дальше