- Zero-cost* abstractions in Kotlin
- Alter type with typealias
- Kotlin Demystified: The power of
when
- Kotlin and Exceptions
- Extension-oriented design
- Delegation Pattern in Kotlin
- Musings on Kotlin Ranges
- Null is your friend, not a mistake
- How to remove all !! from your Kotlin code
- Kotlin: Don’t just use LET for null check
- Inline functions — under the hood
- Reification of the erased
- The one and only object
- Data classes — the classy way to hold data
- Mastering Kotlin standard functions: run, with, let, also and apply
- Kotlin scope and extension functions. How to not harm your code
- Kotlin Standard Functions cheat-sheet
- Collections and sequences in Kotlin
- Sequences
- Effective Kotlin: Prefer Sequence for big collections with more than one processing step
- When to Use Sequences
- Collections and sequences in Kotlin
- Kotlin Sequence Tutorial
- Kotlin : Slow List and Lazy Sequence
- Sequences vs Iterable in Kotlin
- Advanced Kotlin Collection Functionality
Scopes:
- Coroutine Context and Scope
- The reason to avoid GlobalScope
- Easy Coroutines in Android: viewModelScope
Dispatchers:
- Simplifying APIs with coroutines and Flow
- LiveData with Coroutines and Flow — Part I
- LiveData with Coroutines and Flow — Part II
- LiveData with Coroutines and Flow — Part III
- Lessons learnt using Coroutines Flow in the Android Dev Summit 2019 app
- Substituting Android’s LiveData: StateFlow or SharedFlow?
- Shared flows, broadcast channels
- Callbacks and Kotlin Flows
- Exceptions in Kotlin Flows
- Reactive Streams and Kotlin Flows
- Execution context of Kotlin Flows
- Kotlin Flows and Coroutines
- Simple design of Kotlin Flow
- Cold flows, hot channels
- Callbacks and Kotlin Flows
- Android SingleLiveEvent Redux with Kotlin Flow