Other useful features it has are that most constructions are also expresions. So you can assign the outcome of a when and not having a value for one of the branchesd then becomes a compile error. IMHO when is vastly superior to Java's switch. Something like that would also be a great addition to e.g. typescript which inherits limitations from Java's limited syntax.
Kotlin does have destructuring. You can do val (foo,bar) = returnsomePair(). Also works in lambdas when you do a foreach on e.g. map entries.