Int.coerceIn în Kotlin

Ține un număr între limite: coerceIn(0, 100) îl aduce în interval, coerceAtLeast/AtMost pun doar o limită.

Sintaxă
fun Int.coerceIn(minimumValue: Int, maximumValue: Int): Int
fun Int.coerceIn(range: ClosedRange<Int>): Int
fun Int.coerceAtLeast(minimumValue: Int): Int
fun Int.coerceAtMost(maximumValue: Int): Int

Ce face Int.coerceIn

x.coerceIn(0, 100) returnează x dacă este între 0 și 100, 0 dacă este mai mic și 100 dacă este mai mare. Se poate da și un interval: x.coerceIn(1..10). Dacă minimul este mai mare decât maximul, funcția aruncă IllegalArgumentException.

coerceAtLeast(0) pune doar limita de jos (rezultatul este cel puțin 0), iar coerceAtMost(100) doar limita de sus. Funcțiile există pentru toate tipurile numerice și pentru orice valoare Comparable, și înlocuiesc combinații ca max(0, min(x, 100)).

Parametri

Parametru Descriere
minimumValue Limita de jos.
maximumValue Limita de sus.
range Intervalul permis, de exemplu 1..10.

Ce returnează

Valoarea, adusă în limite.

Exemple

Exemplul 1: Volumul unui difuzor

Valorile sub 0 devin 0, cele peste 100 devin 100.

fun main() {
    for (v in listOf(-20, 35, 100, 140)) {
        println("$v -> ${v.coerceIn(0, 100)}")
    }
}

Rezultat

-20 -> 0
35 -> 35
100 -> 100
140 -> 100

Exemplul 2: Doar o limită

Stocul nu poate scădea sub 0, iar reducerea nu poate depăși 30%.

fun main() {
    val stoc = 5
    val vandute = 8
    println("Stoc rămas: ${(stoc - vandute).coerceAtLeast(0)}")
    val reducere = 45
    println("Reducere aplicată: ${reducere.coerceAtMost(30)}%")
}

Rezultat

Stoc rămas: 0
Reducere aplicată: 30%

Exemplul 3: Nota între 1 și 10

Cu un interval ca argument, nota calculată rămâne între 1 și 10. Funcționează și pentru Double.

fun main() {
    val puncte = listOf(-5, 47, 95, 120)
    for (p in puncte) {
        val nota = (p / 10).coerceIn(1..10)
        println("$p puncte -> nota $nota")
    }
    println(10.45.coerceIn(1.0, 10.0))
}

Rezultat

-5 puncte -> nota 1
47 puncte -> nota 4
95 puncte -> nota 9
120 puncte -> nota 10
10.0

Greșeli frecvente

  • Inversezi limitele: x.coerceIn(100, 0) aruncă excepție. Minimul este primul argument.
  • Scrii x.coerceIn(0, 100) și nu păstrezi rezultatul. Funcția returnează o valoare nouă; x rămâne neschimbat.

Comenzi înrudite

  • max (kotlin.math): max returnează cel mai mare dintre două numere de același tip, min pe cel mai mic.
  • maxOf: Returnează cea mai mare (maxOf) sau cea mai mică (minOf) dintre două sau mai multe valori comparabile.
  • IntRange.contains: Lucrul cu un interval a..b: in verifică apartenența, first și last dau capetele, reversed îl inversează.