Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Функции обратного (Callback) вызова (+)
Отправлено
Двоешник (193.200.150.125) 22 июня 2012, г. 14:31
Для лучшего понимания причин использования обратного вызова рассмотрим простую задачу выполнения следующих операций над списком чисел: напечатать все числа, возвести все числа в квадрат, увеличить все числа на 1, обнулить все элементы. Ясно, что алгоритмы выполнения этих четырёх операций схожи — это цикл обхода всех элементов списка с некоторым действием в теле цикла, применяемый к каждому элементу. Это несложный код, и в принципе можно написать его 4 раза. Но давайте рассмотрим более сложный случай, когда список у нас хранится не в памяти, а на диске, и со списком могут работать несколько процессов одновременно и необходимо решать проблемы синхронизации доступа к элементам (несколько процессов могут выполнять разные задачи — удаления некоторых элементов из списка, добавления новых, изменение существующих элементов в списке). В этом случае задача обхода всех элементов списка будет довольно сложным кодом, который не хотелось бы копировать несколько раз. Правильнее создать функцию общего назначения для обхода элементов списка и дать возможность программистам абстрагироваться от того, как именно устроен алгоритм обхода и писать лишь функцию обратного вызова для обработки отдельного элемента списка. (с)
Я так понимаю, что в примере с операциями над списком чисел, будет присутствовать некая функция "А", которая просто перебирает числа последовательно, но применяет к числам то действие (вызывает ту функцию "B1, B2...Bn") которая указана в аргументах "A".
Вот эта "Вi" и есть функцией обратного(Callback) вызова?
Составить ответ | Вернуться на конференцию
Ответы
- Да. - smb (176 байт, 22.06.2012, 17:35:16 195.218.191.184)