www.wikidata.uk-ua.nina.az
U programuvanni funkciya zvorotnogo vikliku abo kolbek vid angl callback ye chastinoyu vikonuvanogo kodu sho peredayetsya yak argument do inshogo kodu yakij maye viklikati cej kod u vidpovid call back tobto vikonati argument u pevnij moment chasu Viklik funkciyi vidbuvayetsya dlya organizaciyi diyi u vidpovid negajnoyi u vipadku sinhronnoyi funkciyi zvorotnogo vikliku napriklad iteruvannya kolekciyi abo zatrimanoyi u vipadku asinhronnoyi napriklad viklik obrobnika podij pislya prihodu danih z klaviaturi V usih vipadkah namir polyagaye u tomu shob vkazati funkciyu abo pidprogramu yak sutnist sho v zalezhnosti vid movi mozhe buti bilsh chi mensh shozhoyu na zminnu Kolbek chasto povertayetsya na riven togo hto jogo viklikav Movi programuvannya pidtrimuyut kolbeki po riznomu chasto realizuyuchi yih yak pidprogrami anonimni funkciyi bloki abo vkazivniki na funkciyi Chasto kolbeki vikoristovuyut shob peredavati zamikannya Zmist 1 Proektuvannya 2 Naochni prikladi 3 Vtilennya 3 1 Java 3 2 JavaScript 3 3 Swift 3 4 Scala 3 5 C 3 6 C 3 7 Python 3 8 Ruby 3 9 Lua 4 Div takozh 5 Znoski 6 PosilannyaProektuvannya RedaguvatiYe dva tipi kolbekiv voni vidriznyayutsya sposobom kontrolyu potoku danih pid chas vikonannya blokuyuchi kolbeki vidomi yak sinhronni kolbeki i vidkladeni kolbeki takozh vidomi yak asinhronni kolbeki U toj chas yak blokuyuchi kolbeki viklikayutsya pered tim yak funkciya poverne rezultat vidkladeni kolbeki mozhut vikonuvatisya vzhe opislya togo yak funkciya povernula rezultat Vidkladeni kolbeki chasto vikoristovuyutsya v konteksti operacij vvodu vivodu abo obrobki podij i viklikayutsya shlyahom pererivannya odnogo ta bilshoyi kilkosti potokiv chi inshim potokom u vipadku bagatopotokovosti Vidpovidno do svoyeyi prirodi blokuyuchi kolbeki mozhut pracyuvati bez pererivan chi bagatopotokovosti voni ridko vikoristovuyutsya dlya sinhronizaciyi abo delegaciyi roboti inshomu potokovi Kolbeki vikoristovuyutsya shob programuvati u vikonnih sistemah U comu vipadku zastosunok nadaye posilannya na pevnu funkciyu kolbeku yaku maye viklikati operacijna sistema yaka potim viklikaye vlastivi danomu zastosunkovi funkciyi u vidpovid na podiyi na zrazok klikiv mishkoyu chi natiskannya na klavishi Tut osnovnoyu problemoyu ye keruvannya privileyami ta bezpekoyu u toj chas yak funkciya viklikayetsya operacijnoyu sistemoyu vona ne maye vikonuvatisya z timi zh privileyami sho j sistema Dlya virishennya ciyeyi problemi vikoristovuyutsya kilcya zahistu Naochni prikladi RedaguvatiUyavi situaciyu uvecheri ti mayesh zustritisya z druzyami u kav yarni Oskilki dlya tebe duzhe vazhlivo pravilno vibrati stolik to ti kazhesh cholovikovi abo druzhini po dorozi na robotu zajdi do kav yarni i zatelefonuj meni poradimosya shodo stolika koli budesh na misci i po telefonu opishesh meni yaki stoliki tam ye Ce priklad kolbeku Do funkciyi viberiStolik ti dodayesh kolbek funkciyu poradsyaZiMnoyuPoTelefonu i os mozhlivij psevdo kod dlya cogo function chooseBestTable callBack var freeTables tableOne tableTwo tableThree callBack freeTables Abo Uyavi sho ti pechesh pasku Postavila pektisya i pishla chitati pro kolbeki a shob ne progaviti yiyi stavish na telefoni nagaduvannya na 30 hvilin pereviriti duhovku Tut vzhe mayemo priklad kolbeku ye proces vipikannya nemittyevij pochatok cogo procesu funkciya pochatiVipikannya i jogo kolbek tvoye nagaduvannya funkciya pereviritiVipikannya Kolbek spracyuye i ti perevirish duhovku mozhlivo paska vzhe gotova Bez kolbeku tobi prijshlosya b siditi usi 30 hvilin nad duhovkoyu Z kolbekom mozhna dozvoliti sobi trohi vidvoliktisya i robiti inshi spravi bo kolbek spracyuye i nagadaye Vtilennya RedaguvatiForma kolbekiv mozhe buti riznoyu u riznih movah programuvannya V assembly C C Pascal Modula2 i podibnih do nih movah na mashinnomu rivni peredayetsya vkazivnik na funkciyu yak argument inshoyi zovnishnoyi chi vnutrishnoyi funkciyi Ce pidtrimuyetsya bilshistyu kompilyatoriv ta daye perevagu vikoristannya razom riznih mov bez specialnih bibliotek chi klasiv obgortok Prikladom mozhe buti Windows API sho bilsh chi mensh napryamu dostupnij z bagatoh mov kompilyatoriv ta asembleriv Zvorotnoyu storonoyu ye te sho programist maye rozumiti mashinnij riven takozh ne pracyuye kontrol bagatoh tipiv C dozvolyaye ob yektam nadavati yih vlasni realizaciyi operaciyi vikliku funkcij Standartna biblioteka shabloniv prijmaye ci ob yekti sho zvutsya funktorami tak samo yak i vkazivniki funkcij yak parametri dlya bagatoh polimorfnih algoritmiv Bagato interpretovanih mov na kshtalt JavaScript Lua Python Perl 1 2 ta PHP prosto dozvolyayut peredavati ob yekt funkciyi CLI movi tipu C i VB NET nadayut bezpechne shodo tipiv vklyuchayuche posilannya delegata shob viznachiti zhorstko tipizovanij vkazivnik na funkciyu Voni mozhut vikoristovuvatisya yak kolbeki Podiyi i obrobniki podij u movah NET nadayut zagalnij sintaksis kolbekiv Funkcionalni movi v cilomu pidtrimuyut funkciyi pershogo klasu yaki mozhut peredavatisya yak kolbeki do inshih funkcij zberigatisya yak dani abo povertatisya z funkcij Deyaki movi taki yak Algol 68 Perl Python Ruby Smalltalk C 11 ta piznishi novishi versiyi C ta VB NET a takozh bilshist funkcionalnih mov dozvolyayut neimenovanim blokam kodu anonimnim funkciyam peredavatisya zamist posilan na funkciyi viznacheni deinde V deyakih movah tipu Scheme ML JavaScript Perl Smalltalk PHP z versiyi 5 3 0 3 C 11 ta piznishih ta v bagatoh inshih taki funkciyi mozhut buti zamikannyami tobto voni mozhut vikoristovuvati ta zminyuvati ti zminni sho buli lokalno viznacheni u tomu zh konteksti v yakomu bula viznachena funkciya V ob yektno oriyentovanih movah programuvannya bez funkciyi bagatoznachnih argumentiv yak Java do versiyi 1 7 citation needed kolbeki mozhna simulyuvati peredayuchi ekzemplyar abstraktnogo klasu abo interfejsu u yakomu otrimuvach vikliche odin chi bilshe metodiv u toj chas yak toj hto viklikaye nadaye konkretnu realizaciyu Taki ob yekti ye naspravdi pachkoyu kolbekiv plyus dani yaki voni mayut obrobiti proyasniti Voni korisni u realizaciyi riznih shabloniv dizajnu tipu Vidviduvach Oglyadach ta Strategiya Java Redaguvati public interface CalcCallback int plus int x int y public class Test2 private Test test public Test2 Test test this test test public void calc CalcCallback callback new CalcCallback Override public int plus int x int y return x y test calcViaCallback callback public class Test int x 5 int y 12 public void calcViaCallback CalcCallback callback int sum callback plus x y System out println sum public class Main public static void main String args Test test new Test Test2 test2 new Test2 test test2 calc JavaScript RedaguvatiKolbeki vikoristovuyutsya v movah podibnih do JavaScript vklyuchayuchi pidtrimku funkcij yak kolbekiv cherez js ctypes 4 i v komponentah tipu addEventListener 5 Os prostij priklad kolbeku function someAction x y someCallback return someCallback x y function calcProduct x y return x y function calcSum x y return x y alerts 75 the product of 5 and 15 alert someAction 5 15 calcProduct alerts 20 the sum of 5 and 15 alert someAction 5 15 calcSum Spochatku funkciya someAction viznachayetsya z argumentom kolbekom someCallback Potim yak mozhlivij kolbek dlya someAction viznachayetsya funkciya calcProduct Inshi funkciyi takozh mozhut vikoristovuvatisya dlya someCallback napriklad calcSum U comu prikladi someAction viklikayetsya dvichi spochatku vikoristovuyuchi yak kolbeku calcProduct i she raz yak kolbek mayuchi calcSum Funkciyi povertayut vidpovidno dobutok ta sumu sho potim vidobrazhayutsya na ekrani za dopomogoyu alert U comu prostomu prikladi kolbeki vikoristovuyutsya perevazhno dlya demonstraciyi principu Mozhna viklikati kolbeki yak zvichajni funkciyi calcProduct x y Kolbeki korisni todi koli funkciya maye vikonati diyi pered viklikom kolbeka abo koli funkciya ne maye abo ne mozhe mati rezultatu dlya povernennya cherez return yak u vipadkah asinhronnogo JavaScript pobudovanogo na tajmerah abo zapitiv XMLHttpRequest Korisni prikladi mozhna znajti v bibliotekah JavaScript tipu jQuery de metod each prohodit po ob yektu tipu masiva a pershij argument ye kolbekom sho vikonuyetsya na kozhnij iteraciyi Swift Redaguvati func relatedValue value Bool callback Int gt callback value 150 25 skorochenij viglyad zamikannya bez zahoplennya posilannya na zminni relatedValue true value in println result value is value abo relatedValue true callback value in println result value is value takozh priklad zastosuvannya pri inicializaciyi ob yekta class A var someValue String init completion A gt Void completion self let a A 0 someValue This is initial value Scala Redaguvati def callbackMethod a Int b Int c Int gt Unit c a b callbackMethod 2 2 result gt println result C Redaguvati include lt stdio h gt V movi S kolbeki realizuyutsya shlyahom peredachi vkazivnika na funkciyu Viznachimo tip callback t sho yavlyatime soboyu vkazivnik na funkciyu sho povertaye int i prijmaye yak argumenti dva chisla tipu int typedef int callback t int int int apply callback int x int y callback t some callback return some callback x y int add callback int x int y return x y int mul callback int x int y return x y int main printf 10 35 d n apply callback 10 35 add callback printf 10 35 d n apply callback 10 35 mul callback return 0 C Redaguvati class CallbackExample Klyuchove slovo delegate u C oznachaye sho vi zadayete viznachennya novogo tipu Cej tip nasliduyetsya vid System Delegate kotrij nadaye mehanizm vikliku metodiv za yih posilannyam Koli vi vkazuyete metod sho uzgodzhuyetsya z signaturoyu viznachenoyu delegatom yak argument vidpovidnogo tipu bude stvoreno novij ekzemplyar delegovanogo tipu vseredini yakogo bude zberezheno vkazivnik na peredanij metod Nadali vi mozhete vikoristovuvati cej ekzemplyar yak zvichajnij metod metod Calculate dobre demonstruye ce public delegate int BinaryOperationCallbackDelegate int operand1 int operand2 Uzgodzhuyetsya z signaturoyu BinaryOperationCallbackDelegate tomu mozhe vikoristovuvatis yak argument tipu BinaryOperationCallbackDelegate public int AddCallback int operand1 int operand2 return operand1 operand2 Uzgodzhuyetsya z signaturoyu BinaryOperationCallbackDelegate tomu mozhe vikoristovuvatis yak argument tipu BinaryOperationCallbackDelegate public int SubstractCallback int operand1 int operand2 return operand1 operand2 Vimagaye operandi potribni dlya metodiv tipu BinaryOperationCallbackDelegate i sam metod cogo tipu dlya jogo zvorotnogo vikliku public int Calculate int operand1 int operand2 BinaryOperationCallbackDelegate callback int result callback operand1 operand2 return result class Program static void Main string args const int operand1 10 const int operand2 20 CallbackExample callbackExample new CallbackExample Console WriteLine callbackExample Calculate operand1 operand2 callbackExample AddCallback Console WriteLine callbackExample Calculate operand1 operand2 callbackExample SubstractCallback Console ReadLine U bilshosti vipadkiv vam cilkom vistachit vbudovanih delegativ tipu Action Arhivovano 7 lipnya 2015 u Wayback Machine Function Arhivovano 7 lipnya 2015 u Wayback Machine Predicate Arhivovano 6 lipnya 2015 u Wayback Machine Python RedaguvatiTODO Kolbeki u Pythondef someAction x y someCallback return someCallback x y def calcProduct x y return x y def calcSum x y return x y vivodit 75 dobutok 5 ta 15 print someAction 5 15 calcProduct vivodit 20 sumu 5 ta 15 print someAction 5 15 calcSum priklad vikoristannya lyambda funkcij numbers num for num in range 20 iteraciya po spisku i vidsiyuvannya elementiv vidpovidno do znachennya yake poverne lyambda funkciya predikat neparni chisla odd numbers list filter lambda n n 2 1 numbers parni chisla even numbers list filter lambda n n 2 0 numbers vivid dvoh novih spiskiv iz vidsiyanimi znachennyami print odd numbers odd numbers print even numbers even numbers Ruby Redaguvati Viklikaye peredanij blok kodu peredayuchi vhidnij parametr u blok yak vhidnij argument Params param parametr yakij bude peredanij bloku kodu def call block with param param yield param end Viklikaye peredanu proceduru peredayuchi vhidnij parametr u neyi yak vhidnij argument Params param parametr yakij bude peredanij u proceduru procedure Proc procedura yaku potribno viklikati iz peredanim argumentom def call proc with param param procedure procedure call param end Viklikaye peredanij lyambda viraz peredayuchi vhidnij parametr u neyi yak vhidnij argument Params param parametr yakij bude peredanij u lyambdu lamda lyambda viraz yakij potribno viklikati iz peredanim argumentom def call lambda with param param lamda lamda call param end call block with param Hello param puts param procedure Proc new do param puts param end call proc with param Hello procedure call lambda with param Hello lambda param puts param Lua Redaguvati funkciya yaka opracovuye elementi peredanogo yij masivu po cherzi i formuye novij masiv peretvorenih funkciyeyu callback elementiv function processArray array callback local outputTable for i elem in ipairs array do local tmp callback elem table insert outputTable tmp return outputTable end function square x return x x end local numbers 1 2 3 4 5 6 7 8 9 local squares processArray numbers square for i number in squares do print number endDiv takozh RedaguvatiZnoski Redaguvati Perl Cookbook 11 4 Taking References to Functions Arhiv originalu za 10 kvitnya 2008 Procitovano 3 bereznya 2008 Advanced Perl Programming 4 2 Using Subroutine References Arhiv originalu za 5 lipnya 2008 Procitovano 3 bereznya 2008 PHP Language Reference Anonymous functions Arhiv originalu za 4 lipnya 2015 Procitovano 8 chervnya 2011 Callbacks Mozilla Developer Network Arhiv originalu za 5 listopada 2012 Procitovano 13 grudnya 2012 Creating Javascript Callbacks in Components Mozilla Developer Network Arhiv originalu za 3 listopada 2013 Procitovano 13 grudnya 2012 Posilannya RedaguvatiStyle Case Study 2 Generic Callbacks Arhivovano 6 zhovtnya 2010 u Wayback Machine Basic Instincts Implementing Callback Notifications Using Delegates Implement Script Callback Framework in ASP NET Implement callback routines in Java Arhivovano 16 veresnya 2008 u Wayback Machine Interfacing C member functions with C libraries archived from the original on July 6 2011 Callback interface implemented within the operational system Arhivovano 12 veresnya 2015 u Wayback Machine Otrimano z https uk wikipedia org w index php title Callback programuvannya amp oldid 36826556