# Tipps & Tricks ###### tags: `TimoliaCreative` `TranClate` `Doucmentation` ## Kotlin features ### with-operator The with operator can set a certain context. Sample: ```kotlin fun mainFunction() { addon { entity { name("mouse") behaviour { getMyMouseBeh(beh = this) } } } } fun getMyMouseBeh(beh: AddonEntityBeh) { with(beh) { components { physics { } } componentGroups { componentGroup("sample") { } } } } ``` In this case we can just call `components { }` as if we are still in the main body and don't have to call `beh.components{ }`. ### Context Receivers A context receivers is still a pre-experimantal feature, see the jetbrains introduction video for mor information: [https://www.youtube.com/watch?v=GISPalIVdQY](https://www.youtube.com/watch?v=GISPalIVdQY). ### Iterating/Using Data It might be useful to use maps, lists or other froms of storing data like coordinates. Here are some methods to iterate more elegant through these data structures. ```kotlin val test = mapOf( 1 to "1", 2 to "2" ) for ((key, value) in test) { //this needs a iterator fun like maps or lists //do stuff if(key.toString() == value) { println("yay") } } ``` this method is called destructering and can also be used outside of loobs: ```kotlin val test = 1 to "1" //this is a fancy way to declare a Pair val (first, second) = test //do stuff if(first.toString() == second) { println("yay") } ``` Note: It's generally considered bad practice to use destructering in lists but you may have a case for using it: ```kotlin val test = listOf(1,2,3) val(x,y,z) = test //do stuff val sum = x + y + z ```