Друкарня від WE.UA

Kotlin: coerceAtLeast і coerceAtMost спрощено

💡 Що означає “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

Забезпечує значення не менше

Вимога до зросту на атракціоні

"Підйом"

coerceAtMost

Забезпечує значення не більше

Обмеження швидкості

"Сповільнення"

Практичний приклад:

Для задачі знаходження максимальної кількості одиниць поспіль у масиві можна використати 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. Ці прості моделі допоможуть вам уникнути помилок при використанні цих функцій.

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Edgar
Edgar@avuzi we.ua/avuzi

Back-end розробник Java Kotlin

3Довгочити
49Прочитання
0Підписники
На Друкарні з 12 грудня

Більше від автора

  • 🔥 How to deep clone / copy complex objects in Kotlin or Java using MapStruct

    Have you ever stumbled upon the challenge of copying complex, nested Java/ Kotlin data structures without losing your mind or cluttering your codebase with tedious boilerplate? You’re not alone.

    Теми цього довгочиту:

    Java
  • Порівняння рішень на Java, Kotlin та Scala

    Давайте розглянемо, як задачу https://leetcode.com/problems/relative-ranks/solutions/6326961/sorting-mapping-approach можна вирішити трьома мовами програмування — Java, Kotlin та Scala.

    Теми цього довгочиту:

    Java

Це також може зацікавити:

  • Телеграм бот. Нотатки. Стаді плани. Архітектура. Вебсокети. Част. 3

    Продовження розробки телеграм бота з попередніх частин. Там ми мінімально налаштовували середовище, а зараз детальніше про саму ідею.

    Теми цього довгочиту:

    Java
  • λanguage: Неформальний опис мови

    Автор пояснює, як написати парсер, інтерпретатор, компілятор, та інші складові власної мови програмування. Описується синтаксис мови, особливості реалізації функцій, умовних конструкцій та інших елементів мови.

    Теми цього довгочиту:

    Js
  • Хто такий бекенд-розробник? Повний путівник

    В сучасному цифровому світі, де інтернет відіграє все більшу роль, професія бекенд-розробника стає все більш затребуваною. Ці спеціалісти відповідають за "внутрішню" частину веб-сайтів та веб-додатків, ту частину, яку користувачі не бачать, але яка забезпечує їхню роботу.

    Теми цього довгочиту:

    Backend

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Телеграм бот. Нотатки. Стаді плани. Архітектура. Вебсокети. Част. 3

    Продовження розробки телеграм бота з попередніх частин. Там ми мінімально налаштовували середовище, а зараз детальніше про саму ідею.

    Теми цього довгочиту:

    Java
  • λanguage: Неформальний опис мови

    Автор пояснює, як написати парсер, інтерпретатор, компілятор, та інші складові власної мови програмування. Описується синтаксис мови, особливості реалізації функцій, умовних конструкцій та інших елементів мови.

    Теми цього довгочиту:

    Js
  • Хто такий бекенд-розробник? Повний путівник

    В сучасному цифровому світі, де інтернет відіграє все більшу роль, професія бекенд-розробника стає все більш затребуваною. Ці спеціалісти відповідають за "внутрішню" частину веб-сайтів та веб-додатків, ту частину, яку користувачі не бачать, але яка забезпечує їхню роботу.

    Теми цього довгочиту:

    Backend