Exception handling in Kotlin Coroutines

Everything you need to know about exception handling mechanism in Kotlin Coroutines.

Item 52: Consider associating elements to a map

How is associateBy useful to improve the performance of finding elements.

Cancellation in Kotlin Coroutines

Everything you need to know about cancellation mechanism in Kotlin Coroutines.

Item 51: Prefer Sequence for big collections with more than one processing step

What is the difference between list and sequence processing, and when each should be preferred.

Job and children awaiting in Kotlin coroutines

What is Job and how it is this most important context responsible for structured concurrency.

Effective Kotlin Item 50: Eliminate obsolete object references

How to help our garbage collector and avoid memory leaks.

Coroutines built-in support vs library

What is the difference between the coroutine functionalities build into language, and those distributed as a library.

Effective Kotlin Item 49: Consider using inline value classes

What are value classes, how to use and inline them.

Coroutines under the hood

A deep dive into how suspension and continuations work under the hood.

Effective Kotlin Item 48: Use inline modifier for functions with parameters of functional types

How inline functions work and why they can be so important for the performance of our application.

What is CoroutineContext and how does it work?

A deep explanation of the coroutine context - the powerful data holder for coroutines.

Effective Kotlin Item 47: Avoid unnecessary object creation

About the most essential rule for performance optimization.

Coroutine builders

How do we start coroutines, what is structured concurrency and how does it work?

Sequence builders in Kotlin Coroutines

How sequences can be created using Kotlin coroutines.

Effective Kotlin Item 35: Consider defining a DSL for complex object creation

What are Kotlin DSLs, how do they work, and how can we implement this pattern ourselves.

Traits for testing in Kotlin

A trick needed when using traits for testing in Kotlin.

Why using Kotlin Coroutines?

The explanation, why coroutines stand out and offer us what hasn't been offered by other technologies.

Effective Kotlin Item 34: Consider a primary constructor with named optional arguments

Why telescoping-constructor pattern and the classic builder pattern are considered outdated in Kotlin.

How does suspension work in Kotlin coroutines?

A deep explanation of how suspension works in Kotlin coroutines.

Effective Kotlin Item 33: Consider factory functions instead of constructors

What factory functions are and why they are so important patterns for object creation.

Effective Kotlin Item 46: Avoid member extensions

What are member extensions, how they are possible and why we should avoid using them.

Kotlin Coroutines dispatchers

Where should we use each dispatcher from the Kotlin coroutines library

Effective Kotlin Item 45: Consider extracting non-essential parts of your API into extensions

What are the differences between members and extensions, and in what cases we should prefer one over another.

Effective Kotlin Item 44: Respect the contract of compareTo

What the contract of the compareTo is and why we should care.

Effective Kotlin Item 43: Respect the contract of hashCode

What the contract of the hashCode is and why we should care.

Effective Kotlin Item 42: Respect the contract of equals

What the contract of the equals is and why we should care.

Kt. Academy new logo: Phoenix

Why we decided to change our logo, and what is the symbolism of Phoenix.

Effective Kotlin Item 41: Use enum to represent a list of values

When should we use enum classes, and when sealed classes instead? What are the advantages of both approaches?

Effective Kotlin Item 40: Prefer class hierarchies to tagged classes

What tagged classes are and why we should use class hierarchies instead of them.

Effective Kotlin Item 39: Use sealed classes and interfaces to express restricted hierarchies

Sealed classes and interfaces might not look like a big deal, but they changed a lot in the way we structure programs.

Effective Kotlin Item 38: Use function types or functional interfaces to pass operations and actions

Kotlin introduced support for function types and function interfaces, and they should be used to represent operations and actions as objects.

Effective Kotlin Item 37: Use the data modifier to represent a bundle of data

Data modifier is a powerful tool. Let's learn about how it works, what are its perils and dangers.

Effective Kotlin Item 36: Prefer composition over inheritance

Years of OOP made us overuse inheritance. Instead, we should more often use composition, that is safer and more explicit. More often, but not always...