Paul N
01/28/2019, 9:21 AMgildor
01/28/2019, 9:23 AMgildor
01/28/2019, 9:23 AMVector
gildor
01/28/2019, 9:25 AMdata class Vector(val x: Double, val y: Double, val z: Double, val w: Double)
data class Color(val alpha: Double, val red: Double, val green: Double, val blue: Double)
Paul N
01/28/2019, 9:27 AMgildor
01/28/2019, 9:27 AMgildor
01/28/2019, 9:28 AMgildor
01/28/2019, 9:30 AMPaul N
01/28/2019, 9:30 AMgildor
01/28/2019, 9:35 AMfun Color.toVector() = Vector(alpha, red, green, blue)
Builder function:
vectorFromColor(alpha: Double, red: Double, green: Double, blue: Double) = Vector(alpha, red, green, blue)
gildor
01/28/2019, 9:36 AMvectorFromColor(alpha = 0, red = 0.5, green = 0.2, blue = 0.1)
gildor
01/28/2019, 9:39 AMgildor
01/28/2019, 9:48 AMinterface FourComponents<A, B, C, D> {
operator fun component1(): A
operator fun component2(): B
operator fun component3(): C
operator fun component4(): D
}
it allows you to use destructuring syntax:
val (a, r, g, b) = someColor
And abstract such classes for cases like times
But you have to implement it each class, but at least it’s interface implementation, not a class that have much more problems in terms of inheritance. So I would recommend to do this only if you have some real use cases for thisDico
01/28/2019, 1:23 PMFourComponents
? You now have to write override fun
instead of operator fun
and any primitives have to get boxed.gildor
01/28/2019, 1:28 PMDico
01/28/2019, 1:28 PM