## 1. Overview

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:

- Swapping values of different
*var*s
- Using a
*Pair* object
- The
*also()* scope function

## 2. Swapping Values of Different *vars*

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*.

## 3. Using *Pair*

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*.

## 4. The *also() *Scope Function

**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)
```

## 5. Conclusion

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.

As always, the full source code used in the article can be found over on GitHub.