Обратно повикване (програмиране)

От Seo Wiki - оптимизация и програмиране за търсачки

Callback(обратно извикване) - предаване на изпълнимия код като един от параметрите на друг код. Обратното извикване позволява на функцията да изпълни кода, който е посочен в аргументите, когато бъде извикана. Този код може да бъде дефиниран в други кодови контексти и да не може да се извиква директно от тази функция. Някои алгоритмични задачи имат като вход не само числа или обекти, но и действия (алгоритми), които естествено се специфицират като обратни извиквания.

Съдържание

Приложение

Концепцията за обратно извикване има много приложения. Например, някои алгоритми (функции) имат като подзадача задачата да изчислят хеш стойност от низ. Удобно е да посочите коя функция да използвате за изчисляване на хеш стойности в аргументите, когато стартирате алгоритъма (функцията).

Друг пример за алгоритъм, за който е естествено да се предаде функция като аргумент, е алгоритъм за обхождане на хранилище на обекти, прилагане на някакво действие към всеки обект. Обратното извикване може да действа като това действие (алгоритъм).

Можете да мислите за обратното извикване като действие, предавано като аргумент на някаква основна процедура. И това действие може да се разглежда като

В някои езици за програмиране (Javascript, Perl, Python, Ruby, ...) е възможно да се конструират анонимни (неименувани) функции и затварящи функции директно в основния израз за извикване на функция и тази възможност се използва широко.

В технологията AJAX, когато правите асинхронна заявка към сървъра, трябва да посочите функция за обратно извикване, която ще бъде извикана веднага щом пристигне отговорът на заявката. Често тази функция се дефинира „директно намясто“, без да й дава конкретно име:

Функцията за обратно извикване също се използва в шаблона за проектиране на наблюдателя. Така например, като използвате библиотеката Prototype, можете да създадете „наблюдател“, който следи кликванията върху елемент с идентификатор „my_button“ и, когато се получи събитие, пише съобщение в елемента „message_box“.

Функцията за обратно извикване е алтернатива на функционалния полиморфизъм, а именно тя ви позволява да създавате функции с по-обща цел, вместо да създавате поредица от функции, които са еднакви по структура, но се различават само на определени места в изпълнимите подзадачи. Функциите, които приемат други функции като аргументи или връщат функции като резултат, се наричат ​​функции от по-висок ред. Техниката за обратно извикване играе важна роля за постигане на повторно използване на кода.

Защо да използвате функции за обратно извикване

За да разберете по-добре причините за използване на обратно извикване, разгледайте простата задача за извършване на следните операции върху списък с числа: отпечатайте всички числа, повдигнете всички числа на квадрат, увеличете всички числа с 1, задайте всички елементи на нула. Ясно е, че алгоритмите за извършване на тези четири операции са подобни - това са цикли, заобикалящи всички елементи от списъка с някакво действие в тялото на цикъла, приложено към всеки елемент. Това е прост код и по принцип можете да го напишете 4 пъти. Но нека разгледаме по-сложен случай, когато списъкът не се съхранява в паметта, а на диска и няколко процеса могат да работят със списъка едновременно и е необходимо да се решат проблемите със синхронизирането на достъпа до елементи (няколко процеса могат да изпълняват различни задачи - премахване на някои елементи от списъка, добавяне на нови, промяна на съществуващи елементи в списъка). В този случай задачатапреминаването през всички елементи на списъка ще бъде доста сложен код, който не би искал да се пренаписва няколко пъти. Би било по-правилно да се създаде функция с общо предназначение за преминаване през елементите на списъка и да се позволи на програмистите да се абстрахират от това как работи алгоритъмът за преминаване и да напишат само функция за обратно извикване за обработка на един елемент от списъка.