Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 19, 2024
In this tutorial, we’ll learn about various ways used to write swap functions in Kotlin.
Generally, a swap function refers to a utility function that allows us to exchange the values of two variables. We’ll learn about swap functions using the following methods:
The simplest use case is to directly swap two variables inline. This method involves swapping the values of two variables using a temporary variable:
var a = 1
var b = 2
val temp = a
a = b
b = temp
assertEquals(2, a)
assertEquals(1, b)
First, two variables a and b are declared and initialized, containing values 1 and 2. We then introduce a variable temp to store the original value of a temporarily before a is overwritten. The value of a is then assigned the value of b and this means a now holds the value that was originally b. Finally, b is assigned the value of temp which has the original value of a. This results in b now holding the value that was initially in a.
The standard Pair is a handy wrapper for two values. We can swap two variable’s values using a Pair instance. The idea is first create a Pair object using the two variables and then reassign them using the corresponding value from the Pair object:
var x = 100
var y = 200
(x to y).apply {
x = second
y = first
}
assertEquals(200, x)
assertEquals(100, y)
In the above example, we used the apply() scope function to reassign a and b.
The also() function maintains a reference to the original object the function is called upon. By using this, we can grab the initial value of b, reassign b to a, and then finally assign a to the original value of b:
var a = 1
var b = 2
a = b.also { b = a }
assertEquals(2, a)
assertEquals(1, b)
In this article, we learned three approaches to writing a basic swap function in Kotlin. We discussed directly swapping variables inline, using a Pair, and using the also() scope function to swap variable values.