== Why is this an issue?

If a local variable is never reassigned, it should be declared `val` to make it a constant within its scope.
This makes the code easier to read and protects the variable from accidental re-assignments in future code changes.

=== What is the potential impact?

==== Readability and Understanding

If a variable is declared `val`, it is evident to readers that the variable value is never altered but serves as a constant.
This makes it easier to understand the code because readers do not need to keep track of possible state changes of the variable.

==== Wrong code

Developers might intend for a variable to remain unchanged and have their code relying on that constraint.
For example, a variable could be expected to have a specific range.
Changing the value of the variable could break that constraint.
Also, developers could have assigned the wrong variable.
If the developers inject a value into a variable with an annotation, they should declare it as late initialized.

Declare variables that remain unchanged as `val` to avoid these mistakes.

== How to fix it

Replace the keyword `var` with `val`.

=== Code examples

==== Noncompliant code example

[source,kotlin,diff-id=1,diff-type=noncompliant]
----
fun resize(): Int {
    var newLength = max(16, 2*bufferLength) // Noncompliant, `newLength` is assigned only once
    allocBuffer(newLength)
    return resize
}

class MyClass {
    @inject
    private var myVar: Int = 0 // Noncompliant, `myVar` is late initialized and should be declared as such
}
----

==== Compliant solution

[source,kotlin,diff-id=1,diff-type=compliant]
----
fun resize(): Int {
    val newLength = max(16, 2*bufferLength) // Compliant
    allocBuffer(newLength)
    return resize
}

class MyClass {
    @inject
    private lateinit var myVar: Int // Compliant
}
----

== Resources

=== Documentation

* https://kotlinlang.org/docs/basic-syntax.html#variables[Kotlin Docs, Variables]

=== Articles & blog posts

* https://medium.com/techmacademy/kotlin-101-val-vs-var-behind-the-scenes-65d96c6608bf[Estefania Cassingena Navone, Kotlin 101: val vs. var Behind The Scenes!]
