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

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

11.12.2021, 18:29. Показов 628. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2021, 18:29
Ответы с готовыми решениями:

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

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

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

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

0
11.12.2021, 18:29
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
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
Ответ Создать тему
Новые блоги и статьи
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru