Size: a a a

Kotlin Community

2020 March 26

NY

Nikita Yatskivskiy in Kotlin Community
Алексей Овсянников
Ну для себя я сделал вывод, что у класса (любого) должна быть цель и в рамках этой цели (именно в рамках) - реализуется базовый функционал, а экстеншены - это то, что уже выходит ИЛИ расширяет функционал так, что он перестает быть базовым
Если у нас обычная dto’шка (data class), которая просто мешок с данными и это её основная функциональность, то логика по типу « "дай дату" при наличии timestamp’а» уже выходит за рамки её функционала. Ведь так?
источник

АО

Алексей Овсянников in Kotlin Community
Nikita Yatskivskiy
Если у нас обычная dto’шка (data class), которая просто мешок с данными и это её основная функциональность, то логика по типу « "дай дату" при наличии timestamp’а» уже выходит за рамки её функционала. Ведь так?
Ну да
источник

АО

Алексей Овсянников in Kotlin Community
Датаклассы в этом плане идеальны (в котлине) (имхо), там уже есть необходимые методы и возможность это дело расширять (через добавление вычисляемых пропертей, например)
источник

NY

Nikita Yatskivskiy in Kotlin Community
Но вычилсяемая проперти - это же то же логика
И таким образом data class может обрасти этой логикой
источник

АО

Алексей Овсянников in Kotlin Community
Nikita Yatskivskiy
Но вычилсяемая проперти - это же то же логика
И таким образом data class может обрасти этой логикой
Ну почему, если вы принимаете в конструкторе лонг, а как проперти у вас лежит DateTime - это вполне себе укладывается в то, что должно быть внутри датакласса
источник

NY

Nikita Yatskivskiy in Kotlin Community
ты сейчас про проперти в главном конструкторе?
источник

АО

Алексей Овсянников in Kotlin Community
Иначе на каждый вызов экстеншн-геттера вы будете получать:

* инстанциирование объекта (как процес)
* Новый объект

Что как бы такое себе
источник

АО

Алексей Овсянников in Kotlin Community
Nikita Yatskivskiy
ты сейчас про проперти в главном конструкторе?
Я сейчас про val в теле:)
источник

NY

Nikita Yatskivskiy in Kotlin Community
Оно?))
data class(
   val timeStamp: Long
) {
   val date: DateTime = createDate(timeStamp)
}
источник

АО

Алексей Овсянников in Kotlin Community
Nikita Yatskivskiy
Оно?))
data class(
   val timeStamp: Long
) {
   val date: DateTime = createDate(timeStamp)
}
Именно
источник

АО

Алексей Овсянников in Kotlin Community
Nikita Yatskivskiy
Оно?))
data class(
   val timeStamp: Long
) {
   val date: DateTime = createDate(timeStamp)
}
Правда, таймстэмп лучше приватным тогда делать:)
источник

АО

Алексей Овсянников in Kotlin Community
Но это тоже имхо
источник

NY

Nikita Yatskivskiy in Kotlin Community
И вообще убрать из главного конструктора
источник

NY

Nikita Yatskivskiy in Kotlin Community
Добавить secondary конструктор, который принимает long
источник

NY

Nikita Yatskivskiy in Kotlin Community
И по итогу ничего лишнего не торчит «наружу»
источник

АО

Алексей Овсянников in Kotlin Community
Хм, теоретически можно, но вот бд такое может и не понять, а с сериализацией проще через примитивы работать
источник

АО

Алексей Овсянников in Kotlin Community
Nikita Yatskivskiy
Добавить secondary конструктор, который принимает long
Так что я бы наоборот сделал - датовремя сделал бы во вторичном конструкторе
источник

AN

Alexander Nozik in Kotlin Community
Bogdan Panchenko
может баги починились сами 😊
Не починились. И там сборка в JS еще не совсем отлажена
источник

AN

Alexander Nozik in Kotlin Community
Опять часа три ловил баг с использованием инфикса to. Кошмарная вещь
источник
2020 March 27

BP

Bogdan Panchenko in Kotlin Community
Интересные типы идея начала выдавать при нажатии Ctrl + Shift + P. Или я раньше не замечал
источник