I personally find the lack of well structured and guided reference manual to the language a very bumpy hurdle towards my journey of liking the language in the first place.
True that there are a lot of similarities with Java, however, with every new thing we start with the basics. I have an overall feeling of a freshman attempting his first uni assignment.
The following is sharply lacking:
List of keywords, their description, their usage, examples of all possible usages and contexts
Reserved words, their description, their usage, examples of all possible usages and contexts
(E.G. What is an “it”, where it came from, where is its significance, what are the scopes, and finally can it be used as a generic modifier outside of its context of significance?
Or Where did the listOf, mapOf come from? Are there any others? How to correctly structure them?
This list of “matryoshka doll” riddles is very long)
Inconsistency of marking structures, such as “. .” for up to, but verbatim “downTo” for down to. Wouldn’t it be clear from the context 1. .9 is up to 9. .1 is down to? Anyone that is interfacing with programming should know basic mathematical notations [1. .9] - closed range of 1 to 9, [1. .9) semi-open range of 1 to 9, (1. .9) open range of 1 to 9. And it really doesn’t matter if in the expression [m . . n] m > n or n < m, the direction can be set runtime from the context, [m . . n, 2] could mean from m to n with steps of 2.
Overall the language lacks consistency.
Non-deterministic variants of the same construct.
list?.size ?: Exception
Wouldn’t it be a better and clearer notation to write
list ? list.size : Exceptionor
list ? list.sizeif we only care for the non null part.
I personally find my learning curve to be too steep without an expert at hand that I’d grill for the details that would make my perspective of Kotlin clearer. We are in an age when newer means better… This is not better than Java…