|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
Для чего нужны callback-функции10.04.2009, 17:55. Показов 87549. Ответов 103
Метки нет (Все метки)
0
|
|
| 10.04.2009, 17:55 | |
|
Ответы с готовыми решениями:
103
|
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|||||
| 04.06.2020, 23:26 | |||||
|
вот человек говорит: И самое главное что человек отвечающий мне таким образом не думает что такой вопрос у вскяого обязательно возникает. Судя по англоязычной (как ни странно) википедии есть три вида колбэка...... Пример про копирование это похоже про колбэки в оконных операционных системах где есть куча специальных функций на события. Пример про сортировку это блокирующий колбэк. А в яваскрипте речь идёт об асинхронном. и вообще здесь попахивает ещё и историей развития этого термина что он означал 60 лет назад и что и под каким впечатлением к нему прицепили 40 лет назад и ещё потом в жаваскрипте стало под этим называться. Просто так передать кудато код функции это мне кажется ещё н е совсем колбэк.
0
|
|||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 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
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 04.06.2020, 23:50 | |||
|
Вопрос зачем нужно вообще делить стороны, чтобы нужно было что-то куда-то сообщать, к этой теме "зачем нужен callback" не имеет никакого отношения. Этот вопрос более фундаментальный и затрагивает, как я уже сказал, все программирование в целом. Можно сказать, что программирование - это искусство делить вещи на общее и частное и организовывать взаимодействие с\между ними. Callback - это просто способ организовать взаимодействие между общим и частным. Добавлено через 5 минут
0
|
|||
|
Вездепух
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|||
| 04.06.2020, 23:55 | |||
|
Так что нет, ни разу вам НЕ приходилось "вместо объяснения просто найти перевод слова с латыни или английского". Вы выдумываете. Зачем же вы нам тогда здесь рассказываете про то, что сами функции все равно придется описывать много раз? Как это вообще относится к рассматриваемому вопросу?
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 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
|
||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 05.06.2020, 00:25 | ||
|
Познакомьтесь с алгоритмами численного интегрирования. Например с тем, который используется в программе по предмету "численные методы", для обучения студентов - методом Эйлера. Этот метод позволяет решать любые обыкновенные дифференциальные уравнения или их системы. Общая реализация таких алгоритмов, в том числе и собственно алгоритм Эйлера, без привязки к конкретной функции существует, например в boost.odeint. По-моему вполне очевидно, что задать уравнение для интегрирования - это гораздо проще, чем вручную писать даже простой метод Эйлера для каждой конкретной функции.
0
|
||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 05.06.2020, 00:30 | ||
|
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 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 функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? Для чего нужны интерфейсы? Для чего нужны указатели? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|