Skip to content
A visual representation of coordinate systems with null values on one side and proper handling using the Elvis operator ?:, with a clear Kotlin code structure in the background.

Mastering Operator Functions with Nullable Values in Kotlin

2 mins0 comments

While working with Kotlin, you have probably used operator functions for tasks like addition and subtraction. But what if you need to allow nullable values ​​on both sides? We will look at how to make operator functions in Kotlin work seamlessly with nullable values ​​using a few tricks and extension functions. It is simpler than it sounds and I believe it will be a great way to clean up your code.

Table of Contents

Toggle

Why Nullable Values Matter in Operator Functions

Consider this: you’ve got a class with an operator function that works beautifully. But then you need to handle null values, and suddenly things get messy. Here’s a straightforward approach to fix that. Let’s define a basic class:

data class Coordinate2D(val x: Int, val y: Int)

operator fun Coordinate2D.plus(other: Coordinate2D): Coordinate2D {
    return Coordinate2D(this.x + other.x, this.y + other.y)
}

This allows us to do something like:

val result = Coordinate2D(3, 4) + Coordinate2D(2, 3)
// result is Coordinate2D(5, 7)

However, if we try to add null values, it breaks. Here’s how you can tweak the function to handle nullable values, using a neat trick with Kotlin’s nullable types:

Using the Elvis Operator to Handle Nulls

The Elvis operator (?:) can handle nulls beautifully. Let’s modify the operator function to account for nullable values by providing a default coordinate when null is passed:

operator fun Coordinate2D?.plus(other: Coordinate2D?): Coordinate2D {
    val left = this ?: Coordinate2D(0, 0)
    val right = other ?: Coordinate2D(0, 0)
    return Coordinate2D(left.x + right.x, left.y + right.y)
}

Now, both null + Coordinate2D(3, 4) and Coordinate2D(3, 4) + null work smoothly:

val result = null + Coordinate2D(3, 4)
// result is Coordinate2D(3, 4)

How cool is that? You don’t need to worry about null checks anymore!

Leveraging Extension Functions with Nullable Receivers

One of Kotlin’s most powerful features is extension functions with nullable receivers. This allows you to define behavior for null types without breaking your flow. Let’s rewrite our function to make it more flexible by handling null on either side:

operator fun Coordinate2D?.plus(other: Coordinate2D): Coordinate2D {
    return (this ?: Coordinate2D(0, 0)) + other
}

This ensures that both null cases are handled with grace. Curious to learn more about Kotlin’s operator overloading? Check out the official Kotlin documentation.

More Kotlin Tips

If you’re interested in enhancing your Kotlin skills, I recommend checking out other articles like Kotlin Suspend Inline Functions Explained for even more advanced topics. Kotlin’s versatility, from handling nulls to managing concurrency, is why it remains a top choice for Android developers.

Conclusion

Using the ?: operator and extension functions allows you to keep your code clean and handle null values effectively. Whether you’re working on complex coordinate operations or just ensuring your code doesn’t break with nulls, these tips will make your Kotlin experience even smoother.

For more insights into Kotlin and Android development, you can also explore my post on understanding Kotlin Flow—a crucial concept for managing state and data streams in modern Android apps.

Did you like this article? You can subscribe to the newsletter to hear about new articles.

Related Posts

Posted ByGörkem Kara

Görkem KARA is a Senior Android Developer with 9 years of experience. It produces innovative mobile solutions with technologies such as Kotlin, Java and Android SDK. He works as a freelancer and provides customized services on performance optimization, user experience design and application architecture in projects.

What did you think of this post?

Comments

No comments yet. Be the first to write one.

Leave a comment

Comments appear after the site owner approves them.

Your comment is published without your name; your email is used only for this comment and never published. Privacy notice

Security check Runs automatically when you send