https://kotlinlang.org logo
#russian
Title
# russian
g

ghedeon

02/12/2019, 2:54 PM
тоже спрошу, никогда не волновало настолько, чтобы что-то менять но все же:
Copy code
1)
sealed class Foo {
    class Bar : Foo()
}
===============
2)
sealed class Foo {
    object Bar : Foo()
}
Вы используете object? Он же по идее так и останется висеть в памяти, а первый должен уйти в GC, нет?
a

altavir

02/12/2019, 3:24 PM
Один объект в памяти вообще погоды не сделает. Он же не накапливается, тем более если у него стейта нет. Класс если что тоже в памяти висит.
m

miha-x64

02/12/2019, 3:25 PM
Если никогда не нужен ни один экземпляр Bar, то class, несомненно, дешевле.
a

altavir

02/12/2019, 3:26 PM
Нэ сильно. Если объект не создается его тоже нет, он же ленивый
прям как я...
e

Eugen Martynov

02/12/2019, 3:34 PM
я думаю класс должен как минимум быть
data
a

altavir

02/12/2019, 3:35 PM
Зачем?
e

Eugen Martynov

02/12/2019, 3:35 PM
иначе сравнение в
when
и хеш в колекциях не будут работать
a

altavir

02/12/2019, 3:36 PM
Сравнение по силед классу делается по типу а не по содержанию, не путайте пожалуйста. Это две разные вещи
e

Eugen Martynov

02/12/2019, 3:37 PM
что то новое выучил сегодня
но в
when
правда
is
используется
что сравнивает ~классы~типы
g

ghedeon

02/12/2019, 3:39 PM
типы
a

altavir

02/12/2019, 3:40 PM
В этом смысле object не очень осмысленен там, потому что его можно сравнить просто при помощи
===
. Но зависит от задачи
g

ghedeon

02/12/2019, 3:40 PM
в when можно без
is
если в sealed object
но назад к памяти, object это lazy singleton, но это слабое утешение. Если их прям много, то в совокупности, думаю, там неплохо наберётся. С другой стороны, enum так делали годами и ничего...
a

altavir

02/12/2019, 3:43 PM
Много это 1000? Без кодогенератора слабо
g

ghedeon

02/12/2019, 3:44 PM
просто я их в mvi-подобной архитектуре в качестве событий использую, т.е. их по десятку на экран может быть.
e

Eugen Martynov

02/12/2019, 3:46 PM
я тока проверил и: 1. when без is не работает для классов наследованных от sealed (не для object) 2. Intristics.areEquals для класса наследованного от sealed делает дефолтное java сравнение
g

ghedeon

02/12/2019, 3:49 PM
если object, то можно без
is
, если class/data, то нужен
is
для сравнения типов или без
is
, если сравниваешь инстансы (редко может понадобиться). Все логично.
e

Eugen Martynov

02/12/2019, 3:50 PM
угу, я просто проверил новое знание полученное в этом thread
Copy code
Сравнение по силед классу делается  по типу а не по содержанию, не путайте пожалуйста. Это две разные вещи
g

ghedeon

02/12/2019, 3:51 PM
ну, он имел ввиду good practice, видимо 🙂. Я просто везде
is
ставлю, чтоб не заморачиваться.
e

Eugen Martynov

02/12/2019, 3:52 PM
aa, oke!!! Теперь понял окончательно
m

miha-x64

02/12/2019, 3:59 PM
Если их прям много, то в совокупности, думаю, там неплохо наберётся.
Если писать код, то там вообще много набирается. Коллекции, строки, неинлайновые лямбды с методрефами, проперти делегаты. Я бы больше беспокоился не о пустых классах. И, ещё раз, object удерживает один экземпляр, instance size для пустого класса — 8..16 байт.
класс должен как минимум быть
data
Ничего более бесполезного в котлине нет и никогда не будет. 🙂
g

ghedeon

02/12/2019, 4:01 PM
понеслась!😅
a

altavir

02/12/2019, 4:13 PM
Ну не знаю как там про дата классы, но про память все верно сказано.
1
c

Czar

02/12/2019, 4:13 PM
Отчасти согласен с miha-x64. И так примеривался и сяк, но везде, где мне в коде нужен hashCode, Котлиновский data класс не подходит 🙂
Изредка использую только за красивый toString 😄
a

altavir

02/12/2019, 4:16 PM
Ну я обычно как маркер использую, и для equals
e

Eugen Martynov

02/12/2019, 4:42 PM
Мы используем data класс чтобы не писать компараторов в тестах
g

gildor

02/13/2019, 2:09 AM
используем дата классы всегда и везде для данных, если нет всяких странностей с hibernate и прочими хаками с nullable id то не понимаю проблемы
1
класс должен как минимум быть
data
Класс в данном случае не только не должен быть
data
но и не может быть
data
, потому что должен иметь как минимум 1 проперти в главном конструкторе