Послевкусие от Kotlin, часть 2
Комментарии 11
-
03.09.17 в 20:43
0
Насчёт работы с датами — можно было чуть большим количеством кода получить даже более красивые результаты
data class IntervalInfo(amount: Long, type: ChronoUnit) operator fun Date.minus(interval: IntervalInfo):Date{…} operator fun Date.plus(interval: IntervalInfo):Date{…} val Int.months = IntervalInfo(this, ChronoUnit.MONTHS) val Int.days = IntervalInfo(this, ChronoUnit.DAYS)
и использовать как-то вроде
val before = date - 3.days val after = date + 2.months
Ну, а если вы не на 8й джаве пока — тогда можно свой аналогийчный энам изобрести.
-
0
Мне не очень понравилась мысль перегружать примитивы. Это хорошо для DSL, но в продакшен коде будет приводить к проблемам, так как на days и months не остановишься, и скоро у простого Int будет api не меньше чем у list-
0
Ну они не сами же вам в код попадают. Где надо — там заимпортировали, где не надо — не импортируете. То есть в том месте где у вас будет работа с датами — там и будете красивый код писать.-
0
Да, только IDE будет подсказывать все. Проверил-
+1
Мне кажется что если оно к месту — то почему бы не писать красиво там где можно писать красиво?-
04.09.17 в 00:41
+1
Может, это чопорно, но по мне Int не должен знать о ChronoUnit, Date и прочем. Написав такой extension, мы расширяем api Int такими знаниями.
Вариант ниже решает эту проблему: DAYS знает о Int, но не наоборот. -
0
Красиво — это не пихать мульйон методов в один тип. Любой нубас может наговнокодить божественных и несолидных объектов, когда это красивым стало?
-
-
-
-
04.09.17 в 00:16
+1
Но в общем можно и не использовать свой data-класс, а писать как-то вроде
val before = date - Pair(3, DAYS)
-
04.09.17 в 00:33
0
Тогда возвращаясь к локаничности, но без перегрузки примитивов. Я, навреное, на это перепишу свой кодval before = date - DAYS*3
-
-
-
-
0
а чем отличаютсяval list1: List?
и
var list9: List?-
0
Тем, что первый нельзя заменять после инициализации. В случае с локальной переменной var нужен не часто, а вот в случае поля — вполне.
-
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.