función variádica


En matemáticas y en programación informática , una función variádica es una función de aridad indefinida , es decir, una que acepta un número variable de argumentos . El soporte para funciones variádicas difiere ampliamente entre los lenguajes de programación .

El término variadic es un neologismo que data de 1936-1937. [1] El término no fue ampliamente utilizado hasta la década de 1970.

Hay muchas operaciones matemáticas y lógicas que aparecen naturalmente como funciones variádicas. Por ejemplo, la suma de números o la concatenación de cadenas u otras secuencias son operaciones que se pueden considerar aplicables a cualquier número de operandos (aunque formalmente en estos casos se aplica la propiedad asociativa ).

Otra operación que se ha implementado como función variable en muchos lenguajes es el formato de salida. La función Cprintf y la función Common Lispformat son dos ejemplos. Ambos toman un argumento que especifica el formato de la salida y cualquier número de argumentos que proporcionen los valores a formatear.

Las funciones variádicas pueden exponer problemas de seguridad de tipos en algunos idiomas. Por ejemplo, las C printf, si se usan con descuido, pueden dar lugar a una clase de agujeros de seguridad conocidos como ataques de cadena de formato . El ataque es posible porque el soporte del lenguaje para las funciones variádicas no es de tipo seguro: permite que la función intente extraer más argumentos de la pila de los que se colocaron allí, corrompiendo la pila y provocando un comportamiento inesperado. Como consecuencia de esto, el Centro de Coordinación CERT considera que las funciones variadas en C son un riesgo de seguridad de alta gravedad. [2]

En los lenguajes funcionales, las variables pueden considerarse complementarias de la función de aplicación , que toma una función y una lista/secuencia/matriz como argumentos y llama a la función con los argumentos proporcionados en esa lista, pasando así un número variable de argumentos a la función. [ cita requerida ] En el lenguaje funcional Haskell , las funciones variádicas pueden implementarse devolviendo un valor de una clase de tipo T ; si las instancias de Tson un valor de retorno final ry una función (T t) => x -> t, esto permite cualquier número de argumentos adicionales x. [ más explicación necesaria ]