Neste artigo, exploraremos Callback e seu impacto na sociedade contemporânea. Desde o surgimento de Callback, houve uma mudança significativa na forma como as pessoas interagem umas com as outras e com o mundo ao seu redor. Ao longo dos anos, Callback tem desempenhado um papel crucial em vários aspectos da vida quotidiana, desde a forma como comunicamos até à forma como consumimos informação. Neste sentido, é essencial compreender a influência de Callback na nossa sociedade atual e refletir sobre as suas implicações para o futuro. Nas próximas páginas, examinaremos detalhadamente como Callback transformou a forma como vivemos, trabalhamos e nos relacionamos, bem como as oportunidades e desafios que isso representa para o mundo moderno.
Em programação de computadores, um método de callback é uma rotina que é passada como parâmetro para outro método. É esperado então que o método execute o código do argumento em algum momento. A invocação do trecho pode ser imediata, como em um (callback síncrono), ou em outro momento (callback assíncrono).[1]
Os meios em que os callbacks são suportados em diferentes linguagens de programação diferem, porém eles são normalmente implementados com sub-rotinas, expressões lambda, blocos de código ou ponteiros de funções.
Uma função que recebe outra função como argumento é considerada uma função de ordem maior, em contraste à uma função de primeira ordem. Há de se notar no entanto que existem outros tipos de funções de ordem maior, como as que retornam uma nova função sem receber uma como argumento.
Em geral, callbacks são necessários para programação assíncrona. Em linguagens que a suportam, callbacks são uma forma de garantir que uma parte do código seja executada após uma ação na qual depende (por exemplo, uma resposta HTTP ou uma chamada de sistema).
Em JavaScript, funções ou métodos são cidadãos de primeira classe representados como objetos Function
,[2] o que significa que podem ser passadas como valores. O método recipiente então pode invocar ou passar o método recebido adiante a qualquer momento.
function funcaoDeOrdemMaior (cb) {
cb()
console.log('Função de ordem maior invocada')
}
function meuCallback () {
console.log('Callback invocado')
}
funcaoDeOrdemMaior(meuCallback)
No exemplo acima, o método funcaoDeOrdemMaior
recebe um argumento cb
que é invocado como um método. Para tanto, deve-se passar em sua invocação como primeiro argumento um outro método (neste exemplo, o método é meuCallback
). Ao executar este código, a linha 7 será executada antes da linha 3, já que a linha 2 invoca meuCallback
.
É possível criar funções com expressões em vez de declarações. Isso permite que uma função seja criada no momento de sua invocação ou uso como valor. Desta forma, o exemplo acima poderia ser reescrito da seguinte forma:
function funcaoDeOrdemMaior (cb) {
cb()
console.log('Função de ordem maior invocada')
}
funcaoDeOrdemMaior(function meuCallback () {
console.log('Callback invocado')
})
Em Python, assim como em JavaScript, as funções são cidadãos de primeira classe.[3] No entanto, as sintaxes para declaração e expressão de funções diferem, devendo-se utilizar def
para declarações e lambda
para expressões.
def funcao_de_ordem_maior(cb):
cb()
print('Função de ordem maior invocada')
def meu_callback():
print('Callback invocado')
funcao_de_ordem_maior(meu_callback)
Passando meu_callback
como agumento para funcao_de_ordem_maior
, podemos observar sua execução. Como o agumento cb
é invocado antes de print
em funcao_de_ordem_maior
, pode-se observar que a linha 6 será executada antes da linha 3.
É possível reescrever o exemplo acima utilizando uma expressão lambda
no lugar da declaração de meu_callback
, o que se mostra útil para métodos simples de uso único:
def funcao_de_ordem_maior(cb):
cb()
print('Função de ordem maior invocada')
funcao_de_ordem_maior(lambda: print('Callback invocado'))