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

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

33Прочитань
1Автори
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

Вам також сподобається

  • Java. Основи неблокуючого I/O

    epoll - це механізм введення-виведення, який дозволяє ефективно моніторити кілька файлових дескрипторів

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

    Java
  • Автоматичне тестування ПЗ (визначення, процес створення)

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

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

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

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

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

    Js

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

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

Вам також сподобається

  • Java. Основи неблокуючого I/O

    epoll - це механізм введення-виведення, який дозволяє ефективно моніторити кілька файлових дескрипторів

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

    Java
  • Автоматичне тестування ПЗ (визначення, процес створення)

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

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

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

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

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

    Js