💡 Що означає “Coerce”?
Англійське слово “coerce” означає:
Примусити або змусити когось зробити щось, навіть якщо ця людина не хоче цього робити добровільно.
У програмуванні coercion означає приведення значення до певних меж чи обмежень, навіть якщо це значення не відповідає їм природним чином.
Розглянемо функції coerceAtLeast
і coerceAtMost
у Kotlin. Розуміння їхньої роботи допоможе уникнути тонких помилок.
coerceAtLeast(value)
Забезпечує, щоб значення було щонайменше заданим числом. Це можна уявити як механізм "підйому".
Аналогія:
Уявіть атракціон у парку розваг із вимогою мінімального зросту 150 см:
Якщо ваш зріст понад 150 см, ви можете зайти без проблем.
Якщо менше, вам потрібен "підйом", щоб відповідати вимогам.
Код:
val height = 140
val minHeight = 150
val result = height.coerceAtLeast(minHeight)
println(result) // Виведе: 150
Якщо зріст менший за мінімальну вимогу, він "підтягується" до 150.
coerceAtMost(value)
Забезпечує, щоб значення не перевищувало задане число. Це як механізм "сповільнення".
Аналогія:
Уявіть шкільну зону з обмеженням швидкості 40 км/год:
Якщо ви їдете 50 км/год, потрібно зменшити швидкість до 40 км/год.
Код:
val speed = 50
val maxSpeed = 40
val result = speed.coerceAtMost(maxSpeed) println(result) // Виведе: 40
Якщо швидкість перевищує максимальну межу, вона зменшується до 40.
Короткий підсумок:
Функція | Значення | Аналогія | Ключова ідея |
---|---|---|---|
| Забезпечує значення не менше | Вимога до зросту на атракціоні | "Підйом" |
| Забезпечує значення не більше | Обмеження швидкості | "Сповільнення" |
Практичний приклад:
Для задачі знаходження максимальної кількості одиниць поспіль у масиві можна використати coerceAtLeast
для оновлення максимальної кількості:
class Solution {
fun findMaxConsecutiveOnes(nums: IntArray): Int {
var maxCount = 0
var currentCount = 0
for (num in nums) {
when (num) {
1 -> maxCount = maxCount.coerceAtLeast(++currentCount)
0 -> currentCount = 0
}
}
return maxCount
}
}
Це рішення для задачі з Leetcode https://leetcode.com/problems/max-consecutive-ones/solutions/6234173/simple-solution/
Головне:
Використовуйте
coerceAtLeast
, коли потрібно, щоб значення відповідало або перевищувало мінімальну межу.Використовуйте
coerceAtMost
, щоб забезпечити верхню межу значення.
Подумайте про "підйом" для coerceAtLeast
і "сповільнення" для coerceAtMost
. Ці прості моделі допоможуть вам уникнути помилок при використанні цих функцій.