|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
Для чего нужны callback-функции10.04.2009, 17:55. Показов 86860. Ответов 103
Метки нет (Все метки)
0
|
|
| 10.04.2009, 17:55 | |
|
Ответы с готовыми решениями:
103
|
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|||||
| 04.06.2020, 23:26 | |||||
|
вот человек говорит: И самое главное что человек отвечающий мне таким образом не думает что такой вопрос у вскяого обязательно возникает. Судя по англоязычной (как ни странно) википедии есть три вида колбэка...... Пример про копирование это похоже про колбэки в оконных операционных системах где есть куча специальных функций на события. Пример про сортировку это блокирующий колбэк. А в яваскрипте речь идёт об асинхронном. и вообще здесь попахивает ещё и историей развития этого термина что он означал 60 лет назад и что и под каким впечатлением к нему прицепили 40 лет назад и ещё потом в жаваскрипте стало под этим называться. Просто так передать кудато код функции это мне кажется ещё н е совсем колбэк.
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 04.06.2020, 23:36 | ||
|
Допустим у нас есть функция, которая "итак может все это сделать" (с), т.е. сортирует по возрастанию. Ну, прекрасно. Затем нам нужна будет функция, которая сортирует по убыванию. Если операция сравнения элементов "вшита" в первую функцию, нам не останется ничего другого, кроме как сделать еще одну, точно такую же в целом функцию, которая сортирует уже по убыванию. Это еще не все, допустим мы хотим отсортировать строки. Значит нам нужна будет точно такая же сортировка, но для сравнения строк? Придется сделать еще одну. И так далее. Получается: алгоритм один и тот же, а функций, реализующих этот алгоритм у нас очень много. Сложность проекта растет. Какая сложность? Их несколько, из них как минимум: 1) Количественная сложность - кода становится тупо больше, каждый тип сортировки занимает место; 2) Сложность сопровождения - если нам надо сменить алгоритм, то придется переписывать много функций, а не одну.
0
|
||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 04.06.2020, 23:38 | |
|
Следующий вопрос. Тут были примеры со всякими записками и я понял это так что вот мол кидай данные какие попало и какую попало функцию и о чудо оно как-то там само будет работать. По факту мы дложны дать правильные данные и правильную подходящую функцию, кто-то говорил что можно интегрировать что хочешь, но ведь все равно надо писать алгоритм для каждой математической функции чтобы её интегрировать. Зачем не тогда общий код в стиле "дайте мне кашу и дайте мне ложку я щас буду есть"
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 04.06.2020, 23:42 | ||||||||
|
это не принципиально на самом деле, но с чего ты взял, что два кода выполняются параллельно? 2. что означает "термин callback" - ты понял? с точки зрения реализации, callback - просто функция, или любой другой функциональный объект (функтор или лямбда), который механизм будет дёргать по мере необходимости, что бы получить какие то данные, или что бы уведомить внешний мир о статусе своей работы. и фсёёёё. ничего сложного, как видишь.
функция выполняет копирование из from в toи периодически запускает коллбек foo, что бы сообщить сколько уже процентов было скопировано. можешь сказать что означает 3й параметр функции?
1
|
||||||||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 04.06.2020, 23:42 | ||
|
какойже это один и тотже алгоритм сравнения если вы строки сравниваете одним способом числа другим способом а скалярные вектора третьим?
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 04.06.2020, 23:50 | |||
|
Вопрос зачем нужно вообще делить стороны, чтобы нужно было что-то куда-то сообщать, к этой теме "зачем нужен callback" не имеет никакого отношения. Этот вопрос более фундаментальный и затрагивает, как я уже сказал, все программирование в целом. Можно сказать, что программирование - это искусство делить вещи на общее и частное и организовывать взаимодействие с\между ними. Callback - это просто способ организовать взаимодействие между общим и частным. Добавлено через 5 минут
0
|
|||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|||
| 04.06.2020, 23:55 | |||
|
Так что нет, ни разу вам НЕ приходилось "вместо объяснения просто найти перевод слова с латыни или английского". Вы выдумываете. Зачем же вы нам тогда здесь рассказываете про то, что сами функции все равно придется описывать много раз? Как это вообще относится к рассматриваемому вопросу?
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 04.06.2020, 23:58 | |||
|
Мы поделили на частное и общее. Частное - это сравнение - их надо 30 штук. А общее, это сама сортировка. Вот qsort - это и демонстрирует. Алгоритм быстрой сортировки реализован один раз и находится в библиотеке - это общее. Частности "как именно сортировать" - передаются в качестве callback.
0
|
|||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|||||
| 05.06.2020, 00:23 | |||||
|
Из вашего пример становится понятно что ключевым обстоятельством является то что вы точно знаете что вызываемая функция во много раз медленнее чем та которая ей передана. То есть в вызываемой функции вы по какому-то таймеру или в определённые моменты выполняете колбэк функцию. И эта колбэк функция даёт вам квант времени на выполнение всего остального кода чтобы другие вещи могли тоже поработать а не ждать когда функция закончит работу. С тем же успехом давно можно было сделать в среде разработки какой-нибудь менеджер времени который тупо в процентах от всего цикла даёт определённое время для каждой функции. Добавлено через 10 минут Что ещё за общий алгоритм интегрирования для всех функций ? Вы наверное забыли отправить салфетки с набросками со обеденного стола в нобелевский комитет? Либо пример с интегрированием крайне неудачный либо что то тут не то. Речь идёт о приближённом вычислении? Потому что я вам могу такую функцию на калякать что и сам алан тьюринг вам не помог бы. С помощь какой магии вы собрались сделать универсальный алгоритм вычисляющий любые интегралы? Добавлено через 6 минут никто там не утопает это просто недостижимый идеал. Это так на вскидку вам про то как в нашей языковой среде живут иностранные термины. Добавлено через 3 минуты
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 05.06.2020, 00:24 | ||||
|
не нужно говорить "колбэк функция". достаточно просто: "коллбек". итак понятно, что это функция, или какой то функциональный объект. если мне понадобятся кванты времени, я знаю где их взять. коллбеки для этого не нужны. функция copy использует коллбек только для того, что бы уведомить внешний мир о статусе проделанной работы. и всё. вот как по твоему твоя программа сможет узнать сколько процентов уже было скопировано? никак не узнает, если функция copy ей об этом не сообщит.а как функция copy сможет сообщить такую информацию?через коллбек. который вообще не имеет никакого отношения ни к callback, ни к этой реальности вообще.
1
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 05.06.2020, 00:25 | ||
|
Познакомьтесь с алгоритмами численного интегрирования. Например с тем, который используется в программе по предмету "численные методы", для обучения студентов - методом Эйлера. Этот метод позволяет решать любые обыкновенные дифференциальные уравнения или их системы. Общая реализация таких алгоритмов, в том числе и собственно алгоритм Эйлера, без привязки к конкретной функции существует, например в boost.odeint. По-моему вполне очевидно, что задать уравнение для интегрирования - это гораздо проще, чем вручную писать даже простой метод Эйлера для каждой конкретной функции.
0
|
||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 05.06.2020, 00:30 | ||
|
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 05.06.2020, 00:37 | |||
![]() Добавлено через 5 минут В любом случае - это уход от темы. Алгоритмы численного интегрирования существуют? Да. Их можно вынести отдельно? Да. Примеры даны выше. В контексте темы все предельно корректно.
1
|
|||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||||
| 05.06.2020, 00:52 | ||||
|
Почему программист всегда имеет дело с некой пугающей неизвестностью? Почему память можно попросить гарантированной величины а циклы процессора нелзя ни просить ни квотировать для разных кусков кода? Но вообще должен сказать что приведённый вами пример мне понравился. Именно в этом случае как ни странно термин callback имеет очень понятный и близкий к значению слова смысл. Верю. Спасибо вы мне действительно помогли. :-) Остаётся неясным вопрос а каким образом в этот же термин обратного вызова вошли другие вещи которые как-то не похожи ни на какой вызов тем более на обратный. Добавлено через 11 минут Добавлено через 3 минуты Я кажется начинаю понимать к чему это но придумать полезное применение этому способу пока не могу.
0
|
||||
| 05.06.2020, 00:59 | |||
|
Не по теме: TheCalligrapher, hoggy, DrOffset, зачем вы кормите этого вампира? Видно же, что это не обычный новичок. Он выбирает из ваших аргументов нужное, компонует как ему выгодно, и делает очередной вброс, чтобы вас развести на дальнешее "объяснение". Нормальный человек читает весь текст целиком и задает вопрос в контексте прочитанного. А такой вот энерговампир, фигурно цитирует то, что поможет ему вытащить из вас еще больше энергии. Смотрите, вот он пишет для примера сортировки:
0
|
|||
| 05.06.2020, 04:38 | |
|
0
|
|
|
Комп_Оратор)
|
||
| 05.06.2020, 11:14 | ||
|
Объекты графического интерфейса - сложные монстры. Они совмещают функционал контроллов (субъектов действия и общения в разных потоках) и другие вещи, такие как окна, рамки, шрифты, способность хостить вложенные контроллы и себе подобные гуи. С этими гуями без наследования (множественного, причём) нельзя решить красиво. Хотя ни один дикий Сишник не признает этого.
Колбэк имеет право на жизнь именно для таких вещей как обобщённые алгоритмы, где специализация возможна на крошечном и универсальном (по виду и применению) кусочке кода. . Сортировка, хороший пример. Ещё могут быть случаи с ООП когда нужно принимать объекты одного или разных типов и запускать член известной сигнатуры (тот или иной в зависимости от того как прибиндят на вызывающей стороне). Насколько я помню в ряде паттернов, это пока наиболее простой вариант. А по сортировке - наш "клиент/эксперт" не видел ни чего круче пузырька, хотя и пузырёк переписывать - не фонтан. Потом при изменении каой-то фишки придётся по всем пузырькам пробежать... А второй случай - язык, который не предоставляет других механизмов. Си и операционные системы на нём написанные - царство коллбеков. Сейчас с function<> и лямбда расширилась возможность передачи вызова и возможно данной техникой злоупотреблят где-то. Но это же не простая тема.
0
|
||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 05.06.2020, 12:52 | |
|
Почему то пропало цитирование. Как только открываю форму ответа оно больше не появляется при выделении текста.
По сути: Я не вампир. Представьте себе так думают новички- много чего не замечают и не могут охватить вниманием все то что им говорят. Я на данный момент вижу три смысла в понятии callbac: 1) Вызывая какую-то длительно работающую функцию вы даёте ей кусок кода который она будет иногда выполнять чтобы в программе происходило что то ещё кроме самой функции. То есть мы тем самым разделяем время между разными функциями, они выполняются не последовательно а в каком-то смысле параллельно. 2) если вы програмите под winapi то там как я понял частенько всякие системные функции требуют дать им ссылочку на ваш код который она выполнит при каком-нибудь событии или вообще при всех событиях. Вы даёте ссылку на вашу функцию а винапа как только что то происходит вызывает эту вашу функцию и закидывает в неё ссылку на нехилый массив с кучей сообщений от системы. А вы должны в этой функции определиться как на что реагировать если вам оно нужно. 3) Если у вас имеется два множества совместимых алгоритмов. То есть один может пользоваться результатами вычисления другого. То вместо того чтобы писать для каждого сочетания алгоритмов отдельную функцию можно сделать так чтобы один алгоритм получал в качестве данных другой алгоритм. Например есть 10 вариантов алгоритма сортировки (и не только пузырьковый и жадный, но и мой сортирующий за один проход LOL) и есть 10 вариантов сравнения разных типов данных,( сравнение чисел, сравнение строк и т.д) чтобы не создавать 100 функций в которых каждый тип сортируется всеми возможными способами можно сделать одну функцию которая в качестве аргументов получает алгоритм сортировки и алгоритм сравнения и плюс к этому 10 функций сравнения и 10 функций сортировки. И таким образом вместо 100 функций мы обойдемся 21 штукой. Экономия на лицо. 4) в языках типа java scrip есть возможность асинхронного программирования и там можно делать функции которые выполняются параллельно независимо друг от друга
0
|
|
|
Неэпический
|
|||
| 05.06.2020, 12:56 | |||
|
Колбэк это кусок кода, который выполняется когда его вызывают.
0
|
|||
| 05.06.2020, 12:56 | |
|
приведите пожалуйста реальный прмиер: для чего нужны дружественные функции?
callback функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? Для чего нужны интерфейсы? Для чего нужны указатели? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|