Personally, i don't see a convincing reason to switch. Though absence of type erasure is nice
Does Kotlin have traits or something similar? If yes, are they complicated to initialize? If not, then does it matter as a point of comparison that Scala has something that might be complicated if Kotlin offers nothing comparable?
I'm really mostly working from a high level of ignorance here.
http://confluence.jetbrains.net/display/Kotlin/Classes+and+I...
Basically the language has no notion of interfaces; preferring instead multiple inheritance. Then the diamond problem is taken care of by making mandatory the overriding of conflicts. See the provided example:
http://confluence.jetbrains.net/display/Kotlin/Classes+and+I...
Then, it also has syntactic sugar for the Delegation pattern:
http://confluence.jetbrains.net/display/Kotlin/Classes+and+I...
One cool thing about Scala's implicit conversions is that they eliminate many use-cases which would make you use traits. Kotlin has a similar mechanism, but kind of different (taken from C#); extension methods:
http://confluence.jetbrains.net/display/Kotlin/Extension+fun...
The classic trait I'm thinking about when thinking about traits is the Enumerable module in Ruby:
http://www.ruby-doc.org/core/classes/Enumerable.html
This is a classic example of where a trait is useful for providing common implementation for collections that only have to implement "each". The cool thing about extension methods is that you can implement all those methods in the Enumerable module above, without dealing with multiple inheritance or traits.
The difference between implicit conversions and extension methods is that implicit conversions are more flexible, but extension methods are easier to reason about and (being statically resolved at compile-time) don't suffer from performance penalties.
I'm not saying that what Kotlin does is better than Scala, but it does seem simpler. Personally I can't wait to play with it.
Simply being able to call a method chain without null checks or pattern matching is really nice. In Kotlin, you can either declare the variables non-nullable or use a safe call chain, e.g.
kennel?.mommies?.puppies()