Что является истинным намерением Kotlins и функция объема - PullRequest
1 голос
/ 22 апреля 2020

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

Если вы будете искать здесь при переполнении стека примеры функций области видимости Котлина, вы получите в итоге этот принятый ответ: { ссылка }

Данный ответ для also { } также

- используйте его, когда вы хотите применить, но не хотите скрывать этот

класс FruitBasket {private var weight = 0

fun addFrom(appleTree: AppleTree) {
    val apple = appleTree.pick().also { apple ->
        this.weight += apple.weight
        add(apple)
    }
    ...
}
...
fun add(fruit: Fruit) = ... }

Использование apply здесь может затенить это, так что this.weight будет относиться к яблоку, а не к корзине с фруктами.

Это также использование, которое я вижу довольно часто. Но если я загляну в документацию по kotlinlang.org , они ясно скажут:

also подходит для выполнения некоторых действий, которые принимают объект контекста как аргумент. Используйте также для дополнительных действий, которые не изменяют объект, таких как регистрация или печать отладочной информации. Обычно вы также можете удалить вызовы из цепочки вызовов, не нарушая логи программы c.

С этой точки зрения приведенный пример будет неверным, поскольку он нарушит логику программы. c если оно удалено. Для меня also - это разновидность Javas peek ( do c), которая есть, но не должна использоваться для продуктивной логики программы c.

Может кто-нибудь просветит меня?

1 Ответ

0 голосов
/ 27 апреля 2020

После более продолжительного обсуждения Reddit об этой теме c документация была скорректирована таким образом, чтобы было предложение

Обычно вы также можете удалять вызовы из цепочки вызовов без удаление лога программы c.

было удалено. См. Соответствующий PR: https://github.com/JetBrains/kotlin-web-site/pull/1676

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...