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ă;xră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ă.