Un callback es una función que se pasa como argumento a otra función para que sea ejecutada (llamada) después de que se complete cierta tarea o evento. En esencia, un callback es una forma de decir: “Cuando termines esto, por favor ejecuta esta otra función”.
Esta técnica es fundamental en la programación, especialmente en contextos donde las operaciones no son inmediatas, como llamadas a bases de datos, solicitudes a servidores, animaciones, o interacción con el usuario.
¿Por qué son necesarios los Callbacks?
En muchos lenguajes y paradigmas, el código se ejecuta secuencialmente, línea por línea. Sin embargo, en aplicaciones modernas (sobre todo web o sistemas con múltiples tareas), hay procesos que toman tiempo —por ejemplo, una consulta a una API o una lectura de archivo— y no queremos que el programa “se quede esperando” sin hacer nada.
Los callbacks permiten:
- Ejecutar código de forma asíncrona: Permiten que el programa continúe con otras tareas mientras espera que una operación termine.
- Gestionar eventos: Como clics del usuario, respuestas del servidor o temporizadores.
- Mantener la modularidad: Separar el proceso principal de lo que debe ocurrir después, haciendo el código más limpio y reutilizable.
¿Cómo funciona un Callback?
Cuando pasamos una función como argumento, la función receptora la guarda y la ejecuta cuando se cumple una condición, como la finalización de una tarea.
Por ejemplo, en JavaScript:
function procesarDatos(datos, callback) {
console.log("Procesando datos...");
// Simulamos una tarea que tarda
setTimeout(() => {
console.log("Datos procesados");
callback(); // Aquí llamamos al callback
}, 2000);
}
function mostrarMensaje() {
console.log("¡Tarea completada!");
}
procesarDatos([1,2,3], mostrarMensaje);
En este ejemplo:
procesarDatosrecibe dos argumentos: los datos y una funcióncallback.- Tras un retraso simulado, se ejecuta el callback, mostrando el mensaje final.
Tipos de Callbacks
- Callbacks síncronos: Se ejecutan inmediatamente dentro de la función que los recibe. Son comunes para tareas rápidas.
function operacion(a, b, callback) {
let resultado = a + b;
callback(resultado);
}
operacion(3, 4, function(res) {
console.log("Resultado:", res);
});
- Callbacks asíncronos: Se ejecutan después de que termina una operación que tarda tiempo, como peticiones a servidores o lectura de archivos.
setTimeout(() => {
console.log("Esto se muestra después de 3 segundos");
}, 3000);
Callbacks y la Programación Asíncrona
Los callbacks son la base de la programación asíncrona en muchos lenguajes, especialmente en JavaScript. Permiten manejar operaciones que no son instantáneas sin bloquear la ejecución del programa.
Sin embargo, un uso excesivo o mal gestionado de callbacks puede llevar a problemas de legibilidad y mantenimiento conocidos como callback hell o «infierno de callbacks», donde las funciones anidadas crecen en complejidad.
Alternativas modernas a los Callbacks
Para evitar el callback hell, hoy en día se usan patrones como:
- Promises: Objetos que representan la eventual finalización (o falla) de una operación asíncrona.
function tareaAsincrona() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Operación completada");
}, 2000);
});
}
tareaAsincrona().then(mensaje => console.log(mensaje));
- Async/Await: Sintaxis que hace el código asíncrono más legible y parecido al síncrono.
async function ejecutar() {
let resultado = await tareaAsincrona();
console.log(resultado);
}
ejecutar();
Ejemplos comunes de Callbacks
- Manejo de eventos en interfaces gráficas:
boton.addEventListener('click', function() {
console.log("Botón clickeado");
});
- Operaciones con archivos:
const fs = require('fs');
fs.readFile('archivo.txt', 'utf8', function(err, data) {
if (err) throw err;
console.log(data);
});
Conclusión
El concepto de callback es una piedra angular en la programación moderna, especialmente en entornos que requieren operaciones asíncronas y manejo de eventos. Permite escribir código modular, eficiente y reactivo.
Aunque los callbacks pueden complicar la legibilidad en casos muy anidados, entender su funcionamiento es clave para luego aprender técnicas más avanzadas de manejo asíncrono, como Promises y async/await.
Dominar el uso de callbacks mejora tu capacidad para desarrollar aplicaciones interactivas, eficientes y adaptadas a las necesidades actuales del software.




