Форум программистов, компьютерный форум, киберфорум
Kotlin
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 02.12.2016
Сообщений: 142
1

Unit в аргументах функции. Как с этим работать?

11.12.2021, 18:29. Показов 624. Ответов 0

Author24 — интернет-сервис помощи студентам
Здравствуйте,
Разбираю чужой код на Kotlin, подскажите что за конструкция в аргументах метода такая:
Kotlin
1
2
3
fun pampaEmployees(params: PampaEmployeeRequest.() -> Unit): List<PampaEmployee> {
    return PampaEmployeeRequest().apply(params).execute()
}
Вот сам PampaEmployeeRequest:
Kotlin
1
2
3
4
5
6
7
8
9
10
class PampaEmployeeRequest : PampaRequest<PampaEmployee>() {
    var divisionId: Long? = null
 
    override fun execute(): List<PampaEmployee> {
        divisionId?.let {
            return pampa.getAllActiveEmployees(divisionId = it)
        }
        return pampa.getAllActiveEmployees()
    }
}
Мне не понятен конкретно момент с params:
Kotlin
1
PampaEmployeeRequest.() -> Unit
Это похоже на лямбда выражение. Unit альтернатива void, но какой смысл этого выражения?

А вызов идет функции здесь:
Kotlin
1
private fun updateEmployeesCache() = Pair(pampaEmployees { }, newExpired())
Т.е. мы ничего не передаем в аргументы функции pampaEmployees. Тогда "params: PampaEmployeeRequest.() -> Unit" является необязательным аргументом?
Буду благодарен если скажете как называется такая конструкция

Добавлено через 4 часа 5 минут
Итак, я разобрался, рассказываю
Существуют функции высших, которая отличается от обычных функций тем, что принимает в качестве аргументов еще одну функцию, которая будет являться лямбда или анонимной функцией. Эти функции можно использовать как объекты, собственно поэтому они могут быть переданы в качестве аргумента.
Функция переданная в качестве аргумента будет называться callback-функция.
Давайте приведу пример:
Kotlin
1
2
3
4
private fun longWork(callback: (arg1: Int, arg2: String) -> Unit) {
val result = doSomething()
callback(result, "Kotlin > Java") // вызов callback
}
После метода doSomething() будет вызвана функция callback, которая ничего не возвращает, о чем нам говорит Unit
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2021, 18:29
Ответы с готовыми решениями:

Как описать проверку на вхождение в аргументах функции?
Напишите функцию myReplace(s1, s2, s3), которая будет принимать три строковых аргумента s1, s2, s3...

Подскажите как работать с этим кодом
Вот ещё один пример. Надо использовать компонент IdIcmpClient. Этот включает метод Ping, который...

DevExpress ASPxgridView как с этим работать?
Достался проект на вебформах древний, там это чудо юдо. Материала в интернете ноль, видосов тоже....

GAC - что это и как с этим работать
Прошу помочь разобраться с этим. Что это с чем едят. Побольше ссылок и еще лучше объяснений. Я...

0
11.12.2021, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2021, 18:29
Помогаю со студенческими работами здесь

Семисегментный дисплей на 4 цифры. Как с этим работать?
Есть дисплей Kingbright CA56-125 RWA R. Работаю с подобными впервые - не ругайте за тупизну,...

Что это за язык и как мне с этим работать?
Здравствуйте, мне довольно срочно надо каким-то образом понять как просмотреть этот файл. Он имеет...

Работа через SIP провайдер - как с этим работать
В общем сабж. Подскажите что да как Добавлено через 3 минуты...

Smart Pointers: что такое и как с этим работать?
Народ, объясните мне что такое Smart Pointers, зачем нужны и как с ними работать?

EXTERNAL TABLE, POLYBASE, HADOOP, mssql, как с этим работать
Добрый день, товарищи. Недавно потребовалось подключиться к hadoop и получить оттуда данные из...

Smooth Streaming Player: как работать с этим элементом при подключении в гаджет
Кто-нибудь пользовался такой прелестью? Если да, то подскажите, каким образом работать с этим...

Ошибка в аргументах функции
Мне нужно сделать 2 функции поиска индексов максимального и минимального элементов но почему то при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru