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

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

  • Як модні бренди формують культуру та впливають на глобальні fashion-тренди

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

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

    Мода
  • Створити блог на Друкарні - швидко, легко та безкоштовно

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

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

    Друкарня
  • Чому Google Merchant Center може заблокувати обліковий запис?

    Одним з найбільш ефективних каналів продажів є система Google Merchant Center. Правда, акаунт в ній може бути несподівано заблокований, якщо при його налаштуванні були порушені правила системи. У статті розглянемо підводні камені і дамо відповідь як уникнути блокування

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

    Google Merchant Center
  • Бухгалтерський супровід ФОП: сучасний підхід до обліку

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

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

    Бухгалтерський Облік Фоп
  • Пилосос як базова техніка для щоденного прибирання

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

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

    Пилососи
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
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

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

  • Чому __name__ == "__main__"?

    "name == "main"" - ключова фраза в Python. Визначає, чи є файл головним скриптом чи модулем. Це допомагає створювати зручні модулі, уникати ненавмисного виконання при імпорті та оптимізувати продуктивність.

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

    Python
  • Види черг в RabbitMQ

    Стаття про черги в Rabbit. Кворум черги. Raft консенсус алгоритм. Типи конфірмів і ановледжментів. Типи черг. V1 vs V2. Фічі черг. Використання, недоліки та переваги.

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

    Програмування

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

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

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

  • Чому __name__ == "__main__"?

    "name == "main"" - ключова фраза в Python. Визначає, чи є файл головним скриптом чи модулем. Це допомагає створювати зручні модулі, уникати ненавмисного виконання при імпорті та оптимізувати продуктивність.

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

    Python
  • Види черг в RabbitMQ

    Стаття про черги в Rabbit. Кворум черги. Raft консенсус алгоритм. Типи конфірмів і ановледжментів. Типи черг. V1 vs V2. Фічі черг. Використання, недоліки та переваги.

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

    Програмування