Question #375EasyNative Android

What are extension functions? Give an example?

#kotlin#extension-functions

Answer

Overview

Extension functions allow adding new functions to existing classes without inheritance.


Syntax

kotlin
fun ClassName.functionName(params): ReturnType {
    // this refers to the receiver object
}

String Extensions

kotlin
// Add custom function to String
fun String.isEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

// Usage
val email = "user@example.com"
if (email.isEmail()) {
    println("Valid email")
}

Int Extensions

kotlin
fun Int.isEven(): Boolean = this % 2 == 0

val num = 4
println(num.isEven()) // true

List Extensions

kotlin
fun <T> List<T>.secondOrNull(): T? {
    return if (this.size >= 2) this[1] else null
}

val list = listOf(1, 2, 3)
println(list.secondOrNull()) // 2

Context Extensions

kotlin
fun Context.showToast(message: String) {
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}

// In Activity
showToast("Hello!") // Instead of Toast.makeText(...)

Extension Properties

kotlin
val String.lastChar: Char?
    get() = if (this.isNotEmpty()) this[length - 1] else null

println("Kotlin".lastChar) // n

Comparison with Java

Java - Utility Class

java
public class StringUtils {
    public static boolean isEmail(String str) {
        return str.contains("@");
    }
}

StringUtils.isEmail(email); // Verbose

Kotlin - Extension

kotlin
fun String.isEmail() = contains("@")

email.isEmail() // Natural

Use Cases: Adding utilities to framework classes, improving API readability, domain-specific operations.