Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCxPr 148 of 299 menu
◀ ▶

Параметр контекста в Kotlin

Контекстный параметр по форме похож на обычный аргумент, но не попадает в скобки вызова. Имя из скобок context становится локальной переменной в теле функции с типом, указанным после двоеточия.

Класс Vault хранит пары ключ-значение в изменяемой карте. Функция deposit принимает только ключ и значение, а обращение к хранилищу идет через имя vault из контекста:

class Vault { private val data = mutableMapOf<String, Int>() fun put(key: String, value: Int) { data[key] = value } fun total(): Int = data.values.sum() } context(vault: Vault) fun deposit(key: String, amount: Int) { vault.put(key, amount) }

Тот же идентификатор можно комбинировать с обычными параметрами и локальными val. Функция depositTwice дважды вызывает метод контекстного объекта с разными ключами:

context(vault: Vault) fun depositTwice(base: String, step: Int) { vault.put(base, step) vault.put(base + "_extra", step * 2) } fun main() { val vault = Vault() context(vault) { depositTwice("fee", 5) println(vault.total()) } }

Объявите класс Counter с методом add и свойством value. Сделайте функцию tick с контекстом counter: Counter, которая увеличивает счетчик на 1. В main выведите значение после трех вызовов внутри одного блока context.

Добавьте функцию resetIfNegative с тем же контекстом: при отрицательном value сбросьте счетчик в ноль через метод класса. Проверьте на счетчике, который сначала ушел ниже нуля.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить