Как придумать свои единицы измерения на примере Compose
Вероятно, это начало серии постов о Compose. Начнем с малого
В Compose можно использовать привычные единицы измерения:
• 18.dp
• 18.sp
• 18.em
Но почему не приходится писать Dp(18) или Dp.Builder().get(18)?
Фокус в extensions-функциях, созданных для всех численных примитивов (Int, Float, Double)
Например:
inline val Int.dp: Dp get() = Dp(value = this.toFloat())
(если вы практикуете только Java, вам может стать плохо, это нормально)
Разберем каждую часть строчки:
• inline — слово, заставляющее компилятор на этапе компиляции упростить код за счет замены лямбда-выражения на последовательный код
если слово inline стоит перед переменной (как в текущем примере), то оно относится к функциям get() и set() переменной
• .dp: Dp — создание переменное типа Dp в классе Int (расширили класс Int новой переменной)
• get() — переопределили зарезервированную функцию get() для переменной dp
• this — ссылка на класс Int, то есть в случае 18.dp ссылка на класс Int(18)
• value — название параметра в конструкторе класса Dp (просто для наглядности)
вот так, использовав всего 5 трюков котлина в одной строчке, можно придумать собственную единицу измерения
....
в боевом проекте такую фишку можно применить для управления, например, балансом юзера — 18.rub + 20.dol = 30.eur. еще идеи?
Post #69
2.16K