Wyobraź sobie, że zlecasz mi napisanie jakiejś tam funkcji, no niech będzie, że funkcji do obsługi klawisza. I teraz co ? wyobraź sobie jak mi przekażesz założenia do tej funkcji ???
że ma reagować na krótkie kliknięcie, długie kliknięcie, i jeszcze żeby miała jakieś auto-powtarzanie wciśniętego klawisza
No ok - ale to ma być komuś (czyli mi zlecone) i ciebie nawet nie obchodzi jak ja to tam w środku zrobię - po prostu ma działać .... ale
no ale teraz chodzi o to, że ta funkcja którą ja tobie mam napisać - MUSI wywołać jaką funkcję po krótkim kliknięciu, po długim kliknięciu itp ....
wszystko fajnie - ale co ? jak ja mam to napisać - skoro ty nie jesteś mi w stanie teraz przekazać tych swoich własnych funkcji bo jeszcze ich nawet nie stworzyłeś. Gdybyś je już miał to może być mi powiedział że konkretnie po krótkim kliknięciu ma się odpalić mała rakietka modelarska a po długim ma się rozjaśniać żarówka
no ok nawet gdybyś miał już konkretnie te funkcje - to jak ja bym miał teraz wiedzieć jakie ty tam w swoim programie używasz zmienne np globalne, jakie piny do odpalania rakiety, jakie piny do detekcji zera sieci itp itd - a jeszcze jakbyś później zmienił zdanie i jednak krótki klik miał robić coś innego ????
Sam widzisz KOŁOMYJA - to ja bym musiał z tobą siedzieć godzinami i pisać wspólny program , który się zazębia w wielu miejscach .... a później jakieś przeróbki tego to KOSZMAR ... czy nie ma wyjścia ???
ależ JEST - za pomocą Callbacków czyli tzw "funkcji zwrotnych"
a zatem ustalamy tylko, że moja biblioteka do obsługi klawisza ma wywołać w uproszczeniu DWIE RÓŻNE funkcje (można i więcej) no ale ustalamy że dwie....
czy mnie jako zlecenioboircę interesuje co będzie w tych funkcjach ? co ty tam sobie w nich napiszesz i jak je zgrasz ze swoim programem ????? NIE
czochra mnie to absolutnie
ponieważ ja posłużę się w odpowiednich miejscach mojej biblioteki do obsługi klawisza TYLKO GOŁYMI wskaźnikami na dwie różne funkcje. Po prostu wywołam jakieś funkcje i nie obchodzi mnie co w nich będzie. ale hola hola .... skoro piszę biblotekę to od razu przygotuję tobie takie małe narzędzie, żebyś TY mógł w wygodny sposób przekazać mi te dwa wskaźniki na swoje własne funkcje w programie, który kiedyś tam napiszesz - jak dostaniesz ode mnie bibliotekę.
Rozumiesz - moja biblioteka będzie sobie działać, coś tam robić a jak przyjdzie odpowiedni moment to WYWOŁA za pomocą wskaźników niejako zwrotnie - twoje funkcje, które ty musisz jakoś przy starcie programu przekazać do tej mojej biblioteki.
To przekazanie to właśnie nazywam ZAREJESTROWANIEM callbacka (czyli przekazanie wskaźnika do twojej jednej i drugiej funkcji) ....
ta cała rejestracja (zajrzyj sobie RAZ do funkcji rejestrującej) ... TO NIC INNEGO jak tylko podstawienie do zmiennej wskaźnikowej w mojej bibliotece - wskaźnika do jakiejś twojej funkcji.
hmm nie wiem - czy teraz troszkę jaśniej ? .... jeśli nie to dopytaj o coś po drodze - czego nie rozumiesz itp ...