Skip to main content

¿Qué es una llamada de cola?

  • Barry

En la programación de computadoras, una llamada de cola es una situación específica dentro del código fuente del programa en la que una función, subrutina o procedimiento devuelve un valor esperado llamando a otra función en lugar de simplemente pasar una variable que contiene el valor de retorno. El nombre en sí denota que la función llamada para calcular el valor que se devolverá está al final o al final de la función que lo llama para proporcionar un valor de retorno. Una llamada de cola es de interés para algunos programadores porque, con ciertas optimizaciones o comportamientos del compilador, no se utiliza espacio de pila adicional para almacenar ubicaciones de código de la función principal; en cambio, la función de cola se usa para generar los informes de valor de retorno directamente al punto de llamada donde se invocó la función original. El uso de una llamada de cola es particularmente útil en situaciones en las que se emplea la recursividad, porque la cantidad de espacio de pila utilizada para almacenar las direcciones de las personas que llaman en casos en los que las llamadas recursivas se anidan muy profundamente podría agotarse rápidamente y detener la ejecución del programa. Si bien el uso de llamadas de cola puede ayudar a aumentar la velocidad, el uso de memoria y la eficiencia en un programa, también puede conducir a situaciones en las que el código fuente se reestructura para usar las llamadas de una manera que dificulta la depuración y el seguimiento, especialmente en casos de recursividad

La existencia de una llamada de cola se debe en gran parte a cómo funciona la pila de llamadas en la mayoría de los programas de computadora y arquitecturas de sistemas. La pila, que es como una pila de placas, es una estructura de datos de primero en entrar, último en salir. Cuando se llama a una función, subrutina o procedimiento, la dirección desde la que se realiza la llamada, llamada marco de pila, se almacena en la pila. Esto significa que un programa que llama a la función A, que luego llama a la función B, tendrá dos cuadros de pila, uno para la función B y otro debajo de él para la función A. Después de que la función B termine de ejecutarse, su cuadro de pila se abre desde la parte superior de la pantalla. La pila y la ejecución regresan a la Función A, que tiene su marco extraído de la pila cuando termina, finalmente regresa el control del programa al punto desde el cual se llamó originalmente a la primera función.

Cuando se usa una llamada de cola, la declaración de retorno en una función usa directamente el valor de retorno de otra función como los datos que se enviarán al código de llamada. En el ejemplo anterior, si la Función A llama a la Función B directamente con la instrucción return, se ha formado una llamada de cola. Dentro de la pila de llamadas, en lugar de tener un marco de pila para las funciones A y B, la función B recibirá la dirección de retorno de la función A y el marco de pila de la función A se desplegará y eliminará, lo que significa que la función B pasará su valor de retorno directamente a la ubicación que llamó a la función A sin primero tener que pasar el control a la función A. Esto aumenta la velocidad de las llamadas a funciones y ayuda a mantener baja la cantidad de información en la pila.

Las propiedades de una llamada de cola pueden hacer que sean una opción muy atractiva para funciones recursivas. Una función recursiva es aquella que se llama a sí misma repetidamente para calcular un valor, como puede ser el caso al atravesar una estructura de datos de lista. No se crean marcos de pila adicionales para las llamadas a funciones anidadas, por lo que se pueden realizar niveles muy profundos de recursión de forma segura sin la amenaza inmediata de un desbordamiento de pila y la posible terminación del programa.