Size: a a a

Programming Offtop

2020 October 06

KD

Konstantin Dovnar in Programming Offtop
Ilmir
Плохо искал
inline class DP(val i: Int) {
   override fun toString(): String {
       return "$i dp"
   }
}

operator fun DP.plus(other: DP) = DP(i + other.i)

val Int.dp; get() = DP(this)

data class Rectangle(
       val topLeftX: DP,
       val topLeftY: DP,
       val bottomRightX: DP,
       val bottomRightY: DP,
) {
   fun resize(h: DP, w: DP): Rectangle {
       println("New size: $w, $h")
       return Rectangle(
               topLeftX = topLeftX,
               topLeftY = topLeftY,
               bottomRightX = topLeftX + h,
               bottomRightY = topLeftY + w
       )
   }
}

fun main() {
   println(Rectangle(0.dp, 0.dp, 10.dp, 10.dp).resize(5.dp, 10.dp))
}
И в чём конкретно тут смысл инты заменять на дп?
Просто чтобы было?
источник

I

Ilmir in Programming Offtop
Bogdan Panchenko
Ну в итоге, пока не будет в джаве refiled дженериков их структурки бесполезны. Ну это я и так знал. Ну и котлиновский инлайн классы имеют преимущество - они могут торчать на ружу (АПИ). Все верно или есть ещё плюсы ?
Они не то, чтобы совсем бесполезны - они полезны, если всё-таки в куче происходит аллокация. Куча меньше дробится, больше локальность, меньше кем-миссов. В итоге лучше перформанс.
Но у них есть огромный минус - их нельзя использовать если у тебя в JVM нет их поддержки. А чтобы была поддержка, надо ставить отдельную сборку.
источник

BP

Bogdan Panchenko in Programming Offtop
Ilmir
Они не то, чтобы совсем бесполезны - они полезны, если всё-таки в куче происходит аллокация. Куча меньше дробится, больше локальность, меньше кем-миссов. В итоге лучше перформанс.
Но у них есть огромный минус - их нельзя использовать если у тебя в JVM нет их поддержки. А чтобы была поддержка, надо ставить отдельную сборку.
Ну то что они не релизнулись понятно, ну короче спасибо за разъяснения. Доброй ночи
источник

I

Ilmir in Programming Offtop
Konstantin Dovnar
И в чём конкретно тут смысл инты заменять на дп?
Просто чтобы было?
источник

BP

Bogdan Panchenko in Programming Offtop
О а есть идеи как перезимовать ?
источник

BP

Bogdan Panchenko in Programming Offtop
Konstantin Dovnar
И в чём конкретно тут смысл инты заменять на дп?
Просто чтобы было?
Ну у тебя типы появляются
источник

BP

Bogdan Panchenko in Programming Offtop
Ну это поверхностно
источник

AM

Andrew Mikhaylov in Programming Offtop
Bogdan Panchenko
О а есть идеи как перезимовать ?
Берёшь твердотопливный котёл, закупаешься дровяными брикетами...
источник

I

Ilmir in Programming Offtop
Konstantin Dovnar
И в чём конкретно тут смысл инты заменять на дп?
Просто чтобы было?
Там пример у меня не дописан. DP должно быть можно складывать, вычитать, но нельзя, к примеру, делить и умножать.
источник

KD

Konstantin Dovnar in Programming Offtop
Для себя вижу в инлайнах только один смысл — какие-то проверки в типах, ограничения.
Сейчас, как я понимаю, нормальной возможности сделать её нет.
источник

BP

Bogdan Panchenko in Programming Offtop
Блин
источник

BP

Bogdan Panchenko in Programming Offtop
Andrew Mikhaylov
Берёшь твердотопливный котёл, закупаешься дровяными брикетами...
источник

KD

Konstantin Dovnar in Programming Offtop
Ilmir
Там пример у меня не дописан. DP должно быть можно складывать, вычитать, но нельзя, к примеру, делить и умножать.
Вот так уже да. Ограничения какие-то.
источник

BP

Bogdan Panchenko in Programming Offtop
Bogdan Panchenko
О а есть идеи как перезимовать ?
Как переименовать*
источник

BP

Bogdan Panchenko in Programming Offtop
Konstantin Dovnar
Для себя вижу в инлайнах только один смысл — какие-то проверки в типах, ограничения.
Сейчас, как я понимаю, нормальной возможности сделать её нет.
Ну на этих типах у тебя есть специальные domain operator и могут быть дополнительные функции
источник

AM

Andrew Mikhaylov in Programming Offtop
Konstantin Dovnar
Для себя вижу в инлайнах только один смысл — какие-то проверки в типах, ограничения.
Сейчас, как я понимаю, нормальной возможности сделать её нет.
Ты видео посмотри. Польза не только в дополнительных ограничениях в типах, польза ещё и в том, что ты дополнительные типы вводишь, уменьшая шансы сложить метры с литрами, или перепутать местами два булина при вызове функции, или в функцию, ожидающую UserId, засунуть нечаянно MessageId.
источник

BP

Bogdan Panchenko in Programming Offtop
Короче очень узконаправленная фича
источник

KD

Konstantin Dovnar in Programming Offtop
Bogdan Panchenko
Ну на этих типах у тебя есть специальные domain operator и могут быть дополнительные функции
Чем эти функции лучше, чем Int.newOperator?
источник

BP

Bogdan Panchenko in Programming Offtop
Konstantin Dovnar
Чем эти функции лучше, чем Int.newOperator?
Тем что это можно сделать на любом инте (ваш вариант) ! 5.minutes + 30.seconds
источник

BP

Bogdan Panchenko in Programming Offtop
Вы котлин дата тайм ещё не щупали ?
источник