0% found this document useful (0 votes)
7 views7 pages

13 - Kotlin Extension Function

13- Kotlin extension function

Uploaded by

specsdeveloper13
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views7 pages

13 - Kotlin Extension Function

13- Kotlin extension function

Uploaded by

specsdeveloper13
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Trending Now Data Structures Algorithms Topic-wise Practice Python Machine Learning Data Science J

Kotlin extension function


Read Discuss Courses Practice

Kotlin gives the programmer the ability to add more functionality to the
existing classes, without inheriting them. This is achieved through a feature
known as extensions. When a function is added to an existing class it is known
as Extension Function. To add an extension function to a class, define a new
function appended to the classname as shown in the following example:

Kotlin

package kotlin1.com.programmingKotlin.chapter1

// A sample class to demonstrate extension functions


class Circle (val radius: Double){
// member function of class
fun area(): Double{
return Math.PI * radius * radius;
}
}
fun main(){
// Extension function created for a class Circle
fun Circle.perimeter(): Double{
return 2*Math.PI*radius;
}
// create object for class Circle
val newCircle = Circle(2.5);
// invoke member function
println("Area of the circle is ${newCircle.area()}")
// invoke extension function
println("Perimeter of the circle is ${newCircle.perimeter()}")
}

Output:

Area of the circle is 19.634954084936208


Perimeter of the circle is 15.707963267948966
Explanation:

Here, a new function is appended to the class using dot notation with class
Circle.perimeter(), and its return type is Double. In the main function, an object
is created to instantiate the class Circle and invoked the function in println()
statement. When the member function is invoked it returns the area of a circle
and similarly, the extension function returns the perimeter of the circle.

Extended library class using extension function

Kotlin not only allows the user-defined classes to be extended but also the
library classes can be extended. The extension function can be added to
library classes and used in a similar way as for user-defined classes. The
following example demonstrates an extension function created for a library
class-

Kotlin

fun main(){

// Extension function defined for Int type


fun Int.abs() : Int{
return if(this < 0) -this else this
}

println((-4).abs())
println(4.abs())
}
Output:

4
4

Explanation: Here, we have extended the library function using an extension


function. We performed the modulus operation on an integer value. We have
passed the integer value -4 and 4 and obtained a positive value for both. If the
parameter value is less than 0 then returns -(value) and if the parameter value
is greater than zero returns the same value.

Extensions are resolved statically

One important point to note about the extension functions is that they are
resolved statically i.e which extension function is executed depends totally on
the type of the expression on which it is invoked, rather than on the type
resolved on the final execution of the expression at runtime. The following
example will make the above argument clear:

Kotlin

// Open class created to be inherited


open class A(val a:Int, val b:Int){
}

// Class B inherits A
class B():A(5, 5){}

fun main(){

// Extension function operate defined for A


fun A.operate():Int{
return a+b
}

// Extension function operate defined for B


fun B.operate():Int{
return a*b;
}

// Function to display static dispatch


fun display(a: A){
print(a.operate())
}

// Calling display function


display(B())
}

Output:

10

Explanation:

If you are familiar with Java or any other object-oriented programming


language, you might notice in the above program, that since class B inherits
class A and the argument passed display function is an instance of class B.
The output should be 25 according to the concept of the dynamic method
dispatch, but since the extension functions are statically resolved, so the
operation function is called on type A. Hence the output is 10.

Nullable Receiver

Extension functions can also be defined with the class type that is nullable. In
this case, when the check for null is added inside the extension function and
the appropriate value is returned.
Example of an extension function as a nullable receiver –

Kotlin

// A sample class to display name name


class AB(val name: String){
override fun toString(): String {
return "Name is $name"
}
}

fun main(){
// An extension function as a nullable receiver
fun AB?.output(){
if(this == null){
println("Null")
}else{
println(this.toString())
}
}

val x = AB("Charchit")

// Extension function called using an instance


x.output()
// Extension function called on null
null.output()
}

Output:

Name is Charchit
Null

Companion Object Extensions

If a class contains a companion object, then we can also define extension


functions and properties for the companion object. Companion object
declaration –

Kotlin

class MyClass {
// companion object declaration
companion object {
fun display(){
println("Function declared in companion object")
}
}
}
fun main(args: Array<String>) {
// invoking member function
val ob = MyClass.display()
}

Output:

Function declared in companion object


Just like the calling of the regular member function of the companion object,
the extension function can be called using only the class name as the qualifier.
Companion object extension example –

Kotlin

class MyClass {
companion object {
// member function of companion object
fun display(str :String) : String{
return str
}
}
}
// extension function of companion object
fun MyClass.Companion.abc(){
println("Extension function of companion object")
}
fun main(args: Array<String>) {
val ob = MyClass.display("Function declared in companion object")
println(ob)
// invoking the extension function
val ob2 = MyClass.abc()
}

Output:

Function declared in companion object


Extension function of companion object

Last Updated : 03 Jan, 2022 17

Similar Reads
How to Write swap Function Working with Anonymous
in Kotlin using the also Function in Kotlin
Function?

Kotlin infix function notation Suspend Function In Kotlin


Coroutines
Kotlin - Scope Function Kotlin Function Variations
With Examples
Function Return and Type Function Literals with
Hierarchy in Kotlin Receiver in Kotlin

Passing Variable Arguments How to Pass a Function as a


to a Function in Kotlin Parameter to Another in
Kotlin?

Related Tutorials
Spring MVC Tutorial Spring Boot Tutorial

Java 8 Features - Complete IBPS Clerk Previous Year


Tutorial Question Papers with
Solutions

Introduction to Heap - Data


Structure and Algorithm
Tutorials

Previous Next

Enum Classes in Kotlin Kotlin generics

Article Contributed By :
CharchitKapoor
C CharchitKapoor

Vote for difficulty


Current difficulty : Expert

Easy Normal Medium Hard Expert

Improved By : tr23, abhishek0719kadiyan


Article Tags : Kotlin OOPs, Picked, Kotlin

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy