DEV Community

Cover image for Reduce cognitive load with Kotlin Extension functions.
Boris
Boris

Posted on

Reduce cognitive load with Kotlin Extension functions.

We are 80% reading the code and 20% writing the code. That's why we should take care about cognitive load which our code reproduce. One way is to write intuitive and readable code.

A very useful Kotlin feature are Extensions functions. Let's see what extensions are and how to use it in your code to make it more readable.

"Kotlin provides the ability to extend a class or an interface with new functionality without having to inherit from the class."

If we want to check if some money amount is valid for transaction we can create simple check function that return a Boolean like this

fun isValidAmount(amount: BigDecimal) = amount > ZERO && amount <  PAYMENT_MAX_AMOUNT
Enter fullscreen mode Exit fullscreen mode

or we should disable / enable some view from the screen

fun hide(amountView: View) {
  amountView.visibility = View.GONE
}

fun show(amountView: View) {
  amountView.visibility = View.VISIBLE

}
Enter fullscreen mode Exit fullscreen mode

These two functions are absolutely correct but we can go even further with Kotlin extensions in order to make code a bit more intuitive and readable. Now let's see how these two functions will look like

fun BigDecimal.isValidAmount() = this in ZERO..PAYMENT_MAX_AMOUNT

//and applied in code
val amount = BigDecimal(1000)
if(amount.isValidAmount()) {
// make a payment
} else {
 //show message to the user
}
Enter fullscreen mode Exit fullscreen mode

and hiding the view function will look like this

// Hides the view
fun View.hide() {
  visibility = View.GONE
}

// Shows the view
fun View.show() {
 visibility = View.VISIBLE
}

// Hides or show the view based on the flag
fun shouldShow(show: Boolean) {
  if(show) visibility.VISIBLE else visibility.GONE
}

// when applied 
if(amount.isValidAmount()) {
    amountView.show() 
} else {
    amountView.hide()
}

// or even further with one liner
amountView.shouldShow(amount.isValidAmount())
Enter fullscreen mode Exit fullscreen mode

You can see how this improves readability in our code.

Under the hood there is nothing special. If we decompile the Kotlin bytecode into Java source file we can see nothing but regular methods with passed arguments.
So there is no performance benefit, it's just a pure Kotlin synthetic sugar!

You can play with them and use it everywhere inside the app where you think that is necessary to improve readability. They are excellent for Utility classes where you need a lot of checks and validations.

Top comments (0)