Послевкусие от 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й джаве пока — тогда можно свой аналогийчный энам изобрести.
-
03.09.17 в 23:36
0
Мне не очень понравилась мысль перегружать примитивы. Это хорошо для DSL, но в продакшен коде будет приводить к проблемам, так как на days и months не остановишься, и скоро у простого Int будет api не меньше чем у list-
04.09.17 в 00:13
0
Ну они не сами же вам в код попадают. Где надо — там заимпортировали, где не надо — не импортируете. То есть в том месте где у вас будет работа с датами — там и будете красивый код писать.-
04.09.17 в 00:29
0
Да, только IDE будет подсказывать все. Проверил-
04.09.17 в 00:32
+1
Мне кажется что если оно к месту — то почему бы не писать красиво там где можно писать красиво?-

04.09.17 в 00:41
+1
Может, это чопорно, но по мне Int не должен знать о ChronoUnit, Date и прочем. Написав такой extension, мы расширяем api Int такими знаниями.
Вариант ниже решает эту проблему: DAYS знает о Int, но не наоборот. -
04.09.17 в 02:170
Красиво — это не пихать мульйон методов в один тип. Любой нубас может наговнокодить божественных и несолидных объектов, когда это красивым стало?
-
-
-
-

04.09.17 в 00:16
+1
Но в общем можно и не использовать свой data-класс, а писать как-то вроде
val before = date - Pair(3, DAYS)-

04.09.17 в 00:33
0
Тогда возвращаясь к локаничности, но без перегрузки примитивов. Я, навреное, на это перепишу свой кодval before = date - DAYS*3
-
-
-
-
03.09.17 в 21:300
а чем отличаютсяval list1: List?
и
var list9: List?-
03.09.17 в 23:38
0
Тем, что первый нельзя заменять после инициализации. В случае с локальной переменной var нужен не часто, а вот в случае поля — вполне.
-
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
