-
- Тупой перевод сленгового термина. Действительно, нет здесь никакой
"обратности" вызова. Скорее это "скрытый" вызов. Исполнение в контексте, скрытом от наших глаз. ETM(54 знак., 04.08.2020 19:49 - 22:50)
- "Call back" - "перезвони". Другой код вызывает(звонит) по
переданному указателю, когда ему есть, что сказать. - lloyd(04.08.2020 20:19)
- Ага, а "backend" - кончи в зад... - ETM(04.08.2020 20:25)
- фи, поручик - lloyd(04.08.2020 20:29)
- Ага, а "backend" - кончи в зад... - ETM(04.08.2020 20:25)
- Не соглашусь. Обратный вызов - подходит. Это когда не программа вызывает функцию периферии, а функция периферии вызывает (функцию) программу(ы). Потому и обратный. - Nikolay_Po(04.08.2020 19:54)
- "Call back" - "перезвони". Другой код вызывает(звонит) по
переданному указателю, когда ему есть, что сказать. - lloyd(04.08.2020 20:19)
- Рассмотри как работает qsort() RxTx(998 знак., 03.08.2020 17:27, ссылка)
- Спасибо - Evgeny_CD(03.08.2020 18:12)
- Спасибо за чёткий пример. - fk0(03.08.2020 17:32)
- Пример - так себе. Лучше на примере коммуникации. Cкpипaч(632 знак., 03.08.2020 16:57)
- Спасибо! Первый человек, который сумел доходчиво пояснить. - Evgeny_CD(03.08.2020 17:11)
- Callback - это идиома англоговорящих, американизм. Обозначает
ситуацию, когда сначала куда-то звонят, а потом через некоторое
время в ответ перезвонят, и может быть не раз. - RxTx(03.08.2020 16:30)
- Интересно, как бы они перевели фразу "скинуть бомжа"?:) - Vit(05.08.2020 04:36)
- BLM ? - BlackMorda(05.08.2020 08:00)
- спасибо, кэп! - Argon(03.08.2020 16:35)
- "Кэп" - это саркастическая добавка (Captain Obvious). Ставится обычно, когда человек (т.е. якобы я) пишет очевидные вещи. Нет, тебе не очевидные. Чтобы добавлять сарказм и писать "кэп", ты должен был знать либо смысл идиомы либо как это работает. Понимание смысла идиомы избавялет от исходного вопроса "Кто-нить "на пальцах" сможет объяснить суть callback функций (обратного вызова) ?" RxTx(11 знак., 03.08.2020 17:13)
- Интересно, как бы они перевели фразу "скинуть бомжа"?:) - Vit(05.08.2020 04:36)
- Предлагаю пошагать по коду в отладчике. Сразу будет видно, как он
прыгает "туда" и "обратно". - SciFi(03.08.2020 14:09)
- да ничего же такого не будет видно! main -> each ->
cb_bodyx -> each -> main. Все точно также, как при обычном вызове
функций. - Argon(03.08.2020 14:14)
- Гораздо интереснее становится, когда cb_body() находится в коде,
который написали мы, а each() -- в совершенно классном и полезном
коде, который написала фирма КрупноСофт, и который мы скачали с
гитхаба. Получается, мы заставили крупнософтовский код вызвать
(обратно!) наш код, чтобы делать полезные и волшебные штуки. При
этом мы совсем не меняли фирменный код. - SciFi(03.08.2020 15:32)
- Я понимаю, как это работает. Не нравится слово "обратно" в данном
контексте, не удается с ним примириться ) - Argon(03.08.2020 16:15)
- Вот когда толерасты переименуют всех слэйвов в мастеров, а чорное в
белое, они доберутся и до этого слова. Я бы не педалировал эту тему
от греха подальше... - SciFi(03.08.2020 16:20)
- )) - Argon(03.08.2020 16:27)
- Вот когда толерасты переименуют всех слэйвов в мастеров, а чорное в
белое, они доберутся и до этого слова. Я бы не педалировал эту тему
от греха подальше... - SciFi(03.08.2020 16:20)
- Я понимаю, как это работает. Не нравится слово "обратно" в данном
контексте, не удается с ним примириться ) - Argon(03.08.2020 16:15)
- Гораздо интереснее становится, когда cb_body() находится в коде,
который написали мы, а each() -- в совершенно классном и полезном
коде, который написала фирма КрупноСофт, и который мы скачали с
гитхаба. Получается, мы заставили крупнософтовский код вызвать
(обратно!) наш код, чтобы делать полезные и волшебные штуки. При
этом мы совсем не меняли фирменный код. - SciFi(03.08.2020 15:32)
- да ничего же такого не будет видно! main -> each ->
cb_bodyx -> each -> main. Все точно также, как при обычном вызове
функций. - Argon(03.08.2020 14:14)
- Суть в том, что какой-то компонент программной системы в момент
компиляции НЕ ЗНАЕТ какой другой компонент он будет использовать
(вызывать). И узнаёт это только во время исполнения, когда ему
передают адрес функции (функтор, класс, не важно...) которую он
должен вызывать для выполнения вычислений, нотификации о событии и
т.п. Суть в ОТСУТСТВИИ ЗАВИСИМОСТИ вызывающего модуля (которому
передали указатель на функцию) от вызываемого. Архитектурно
программная система становится fk0(16 знак., 03.08.2020 14:09)
- да я это понимаю, но где здесь "обратность"? - Argon(03.08.2020 14:12)
- В данном случае так и есть. Применяется для укрытия зависимости. Но
механизм такой как в настоящем callback, поэтому так называется.
Callback тесно свазан с поточностью и асинхронным возвращенем
результата. Например, поток 1 вызывает неблокирующую функцию (А) и
как параметр передает указатель на callback (Б). Функция А долго
думает чтото, выполняет и после завершения вызывает функцию (Б) с
результатом. Т.е. Ты (А) сделай что там надо и верни результат. Вот
возвращение framer(27 знак., 03.08.2020 14:34)
- а что такое "настоящий callback"? - Argon(03.08.2020 14:43)
- например framer(3037 знак., 03.08.2020 16:42)
- аж двойной! жуть! - Argon(03.08.2020 16:55)
- например framer(3037 знак., 03.08.2020 16:42)
- а что такое "настоящий callback"? - Argon(03.08.2020 14:43)
- Подразумевается что компонент 1 (main) вызывет компонен 2 (each) и
передаёт ему свою функцию, принадлежащую компоненту 1 (cb_body),
которая потом будет вызвана из each. "Обратность" в этом. - fk0(03.08.2020 14:20)
- п-пастойте-ка, cb_body не принадлежит какому-то компоненту!
Совершенно параллельная функция всем прочим функциям. - Argon(03.08.2020 14:28)
- Подразумевается, что она принадлежит компоненту 1, тому же, который вызывает each.
Потому, что передавать указатель на функцию от чужого компонента --
странная идея. Ибо обычно видны только публичные (интерфейс)
функции чужих компонентов, а не всё подряд. - fk0(03.08.2020 14:48)
- Выше упомянули про потоки... Вот если бы это было сказано про
межпоточное взаимодействие - все было бы гораздо более понятно.
Т.е. из функции main() потока 1 вызывается функция each() потока 2,
при этом снабжается функцией возврата результата. И вот эта функция
возвращает результат в 1й поток из 2-го. Это моя догадка на основе
слов framer-а, но может, так оно и должно объясняться? Argon(77 знак., 03.08.2020 14:54)
- Потоки приплетены совершенно напрасно, только запутывают. Функция
из одного потока никак не вызовет функцию из другого потока -- это
в принципе невозможно. Суть именно в принадлежности изначальной
функции (main) и вызываемой через указатель функции к одному
классу, компоненту, модулю... Достаточно представить, что в
программе нет свободных функций. Все они кому-то принадлежат. - fk0(03.08.2020 15:11)
- спасибо, надо переварить... - Argon(03.08.2020 15:22)
- Ну потоки тоже неудачное объяснение. И пример неудачный. Нужно представить, что функции each, cb_body1 и cb_body2 находятся в отдельном модуле и обслуживают какое-то свое устройство. each выполняется и проверяет работу этого устройства, а в некоторых случаях возвращает управление обратно в модуль. - VLLV(03.08.2020 14:57)
- Потоки приплетены совершенно напрасно, только запутывают. Функция
из одного потока никак не вызовет функцию из другого потока -- это
в принципе невозможно. Суть именно в принадлежности изначальной
функции (main) и вызываемой через указатель функции к одному
классу, компоненту, модулю... Достаточно представить, что в
программе нет свободных функций. Все они кому-то принадлежат. - fk0(03.08.2020 15:11)
- Выше упомянули про потоки... Вот если бы это было сказано про
межпоточное взаимодействие - все было бы гораздо более понятно.
Т.е. из функции main() потока 1 вызывается функция each() потока 2,
при этом снабжается функцией возврата результата. И вот эта функция
возвращает результат в 1й поток из 2-го. Это моя догадка на основе
слов framer-а, но может, так оно и должно объясняться? Argon(77 знак., 03.08.2020 14:54)
- Подразумевается, что она принадлежит компоненту 1, тому же, который вызывает each.
Потому, что передавать указатель на функцию от чужого компонента --
странная идея. Ибо обычно видны только публичные (интерфейс)
функции чужих компонентов, а не всё подряд. - fk0(03.08.2020 14:48)
- п-пастойте-ка, cb_body не принадлежит какому-то компоненту!
Совершенно параллельная функция всем прочим функциям. - Argon(03.08.2020 14:28)
- В данном случае так и есть. Применяется для укрытия зависимости. Но
механизм такой как в настоящем callback, поэтому так называется.
Callback тесно свазан с поточностью и асинхронным возвращенем
результата. Например, поток 1 вызывает неблокирующую функцию (А) и
как параметр передает указатель на callback (Б). Функция А долго
думает чтото, выполняет и после завершения вызывает функцию (Б) с
результатом. Т.е. Ты (А) сделай что там надо и верни результат. Вот
возвращение framer(27 знак., 03.08.2020 14:34)
- да я это понимаю, но где здесь "обратность"? - Argon(03.08.2020 14:12)
- дык each по указателю вызывает n раз сначала cb_body1 потом
cb_body2, но пример так себе ) - Aleksey_75(03.08.2020 14:07)
- дык-то дык, но где "вызываемый код вызывает вызывающий код"? - Argon(03.08.2020 14:16)
- ) не читайте советских газет! - Aleksey_75(03.08.2020 14:17)
- т.е. хабр не читать? а что читать? - Argon(03.08.2020 14:29)
- ) не читайте советских газет! - Aleksey_75(03.08.2020 14:17)
- дык-то дык, но где "вызываемый код вызывает вызывающий код"? - Argon(03.08.2020 14:16)
- Это просто указатель на функцию... POV_(138 знак., 03.08.2020 14:07, )
- Тупой перевод сленгового термина. Действительно, нет здесь никакой
"обратности" вызова. Скорее это "скрытый" вызов. Исполнение в контексте, скрытом от наших глаз. ETM(54 знак., 04.08.2020 19:49 - 22:50)