Lately, I've been diving into the Kotlin book "Atom Kotlin," and I find the concept of extension functions truly remarkable. Despite being a small feature, when leveraged effectively, it has the potential to bring about significant improvements in your code.
Syntax of the extension function
fun ReceiverType.extensionFunction() { ... }
- Imagine you want to add single and double quote methods to strings. With extensions, it's a breeze:
fun String.singleQuote() = "'$this'"
fun String.doubleQuote() = "\"this\""
- Now you can use these functions like they were always part of the String class:
"Hi".singleQuote() // Now "Hi" is in single quotes!
Combo power: Chaining extensions
Need to apply multiple extensions one after another? No sweat! Just keep using the this
keyword to reference the modified string. Like this:
fun String.strangeQuote() = this.singleQuote().singleQuote() // Double the quotes!
Simplifying Class Functionality
Extensions aren't just for other people's code. You can use them to improve your own classes too! Let's say you have a Book
class:
class Book(val title: String)
With an extension, you can easily categorize books:
fun Book.categorize(category: String) =
"""title: "$title", category: $category"""
Now you can categorize books without writing out the title
property every time.
Things to keep in mind:
- Extensions can only access public parts of the class they're extending.
- They're a kind of syntactic magic, making your code look cleaner and more natural.
Final thought
In short, extension functions are a powerful tool in Kotlin that lets you add functionality and improve code readability. It's like giving your code superpowers!
Refs: Atomic Kotlin by Bruce Eckel , Svetlana Isakova
Top comments (0)