
- Item 2: Eliminate critical sections - the item presenting the essentials of the problem of critical sections and the most important ways to eliminate them on JVM.
- Item 35: Consider using dependency injection - the item presenting the most important reasons to use dependency injection and how we implement it.
- Item 48: Consider using object declarations - the item presenting how using object declarations can be a powerful optimization. Parts of this item were extracted from Item 47: Avoid unnecessary object creation.
- Item 49: Use caching when possible - the item presenting the most important technique for efficiency optimization: caching. Parts of this item were extracted from Item 47: Avoid unnecessary object creation.
- Item 50: Extract objects that can be reused - the item presents another important techniqiue for efficiency optimization, that is extracting objects that can be reused. Parts of this item were extracted from Item 47: Avoid unnecessary object creation.
- Item 55: Consider associating elements to a map - the item presents a powerful technique for efficiency optimization, that is associating elements to a map so they can be found in constant time.
- Item 56: Consider using groupingBy instead of groupBy - the item presents a more efficient alternative to groupBy function for grouping elements.
- Item 60: Use appropriate collection types - the item presents different collection types that can be used in different situations. It explains how the standard collections work, and then presents alternatives like HashMap, HashSet, Deque, sorted trees.
- Item 4: Do not expose inferred types - this item was merged with Item: Specify the variable type when it is not clear, and together they made Item: Consider making types explicit.
- Item 8: Handle nulls properly - this item was never a clear suggestion, so I decided to remove it, but the majority of its content was included in other items, like Item 7: Prefer a nullable or Result result type when the lack of a result is possible.
- Item 21: Use property delegation to extract common property patterns - this item was an explanation of how property delegation works rather than a clear suggestion. Since this topic is well covered in the Advanced Kotlin, I decided to remove it from this book.
- Kotlin Essentials, which covers all the basic Kotlin features.
- Functional Kotlin, which is dedicated to functional Kotlin features, including function types, lambda expressions, collection processing, DSLs, and scope functions.
- Kotlin Coroutines: Deep Dive, which covers all the features of Kotlin Coroutines, including how to use and test them, using flow, best practices, and the most common mistakes.
- Advanced Kotlin, which is dedicated to advanced Kotlin features, including generic variance modifiers, delegation, multiplatform programming, annotation processing, KSP, and compiler plugins.
- Effective Kotlin: Best Practices, which is about the best practices of Kotlin programming.
