Hullaballoonatic
06/10/2019, 6:39 PMclass Foo(val title: String = *the name of the field storing the instance of this class*)
val foo = Foo()
So, in this case "foo"Shawn
06/10/2019, 6:40 PMHullaballoonatic
06/10/2019, 6:40 PMkarelpeeters
06/10/2019, 7:25 PMdata class Foo(val title: String) {
companion object {
operator fun provideDelegate(thisRef: Any, prop: KProperty<*>): ReadOnlyProperty<Any, Foo> {
val foo = Foo(prop.name)
return object: ReadOnlyProperty<Any, Foo> {
override fun getValue(thisRef: Any, property: KProperty<*>) = foo
}
}
}
}
class Test {
val test by Foo
}
fun main() {
println(Test().test) //"Foo(title=test)"
}
Hullaballoonatic
06/10/2019, 7:28 PMkarelpeeters
06/10/2019, 7:28 PMdata class Foo(val title: String) {
companion object {
operator fun invoke(): ReadOnlyProperty<Nothing?, Foo> {
return object: ReadOnlyProperty<Nothing?, Foo> {
var foo: Foo? = null
override fun getValue(thisRef: Nothing?, property: KProperty<*>) =
foo ?: Foo(property.name).also { foo = it }
}
}
}
}
fun main() {
val test by Foo()
println(test) //"Foo(title=test)"
}
Hullaballoonatic
06/10/2019, 7:28 PMby
was an overridable operatorkarelpeeters
06/10/2019, 7:28 PMNothing?
Hullaballoonatic
06/10/2019, 7:31 PMclass MySpecialList<T>(val data: MutableList<T>) : MutableList<T> by data {
override fun add(element: T): Boolean {
foo(element)
return (this as MutableList<T>).add(element)
}
}
karelpeeters
06/10/2019, 7:33 PMx = add(2, 3)
y = add(x, 2)
Hullaballoonatic
06/10/2019, 7:34 PMkarelpeeters
06/10/2019, 7:34 PMy.operands == setOf(x, 2)
and x.users = setOf(y)
class Add: User by User() {
var left by operand<Value>()
var right by operand<Value>()
}
add2.left = add1
and everything is updated automatically.Hullaballoonatic
06/10/2019, 7:36 PMval mass = <http://4.kg|4.kg>
val volume = 1.m * <http://3.cm|3.cm> * 5.dm
val density = mass / volume
karelpeeters
06/10/2019, 7:36 PMHullaballoonatic
06/10/2019, 7:37 PMval density = 4.lbs/sqInch
div
here and make a sqInch
object and do some funny shit to get that to workkarelpeeters
06/10/2019, 7:39 PMval inch = 1.inch
and val sqInch = inch * inch
Hullaballoonatic
06/10/2019, 7:42 PM.
val acceleration = 52m/s/s
karelpeeters
06/10/2019, 7:44 PMu
.Hullaballoonatic
06/10/2019, 7:45 PMuntil
operator:
println(5..<8)
// 5, 6, 7
and unbounded ranges:
println(6..) // 6, 7, 8, 9, 10, 11, 12, ...
that i could use in indexing:
println(foo[..4])
karelpeeters
06/10/2019, 7:46 PMHullaballoonatic
06/10/2019, 7:46 PMkarelpeeters
06/10/2019, 7:47 PMHullaballoonatic
06/10/2019, 7:47 PM