En la programación funcional, los programas se ejecutan mediante la evaluación de expresiones , en contraste con la programación imperativa donde los programas se componen de declaraciones que cambian de estado global cuando se ejecutan. La programación funcional típicamente evita el uso de un estado mutable.
La programación funcional requiere que las funciones sean de primera clase , lo que significa que se tratan como cualquier otro valor y pueden pasarse como argumentos a otras funciones o devolverse como resultado de una función. Ser de primera clase también significa que es posible definir y manipular funciones desde otras funciones. Se debe prestar especial atención a las funciones que hacen referencia a variables locales desde su alcance. Si una función de este tipo escapa a su bloque después de ser devuelta de ella, las variables locales deben conservarse en la memoria, ya que podrían ser necesarias más adelante cuando se llame a la función. A menudo es difícil determinar de manera estática cuándo se pueden liberar esos recursos, por lo que es necesario usar la administración automática de la memoria.
Se sabe que la programación funcional proporciona un mejor soporte para la programación estructurada que la programación imperativa. Para hacer un programa estructurado es necesario desarrollar abstracciones y dividirlo en componentes que se interconecten entre sí con esas abstracciones. Los lenguajes funcionales ayudan a esto al facilitar la creación de abstracciones limpias y simples. Por ejemplo, es fácil abstraer un fragmento de código recurrente mediante la creación de una función de orden superior, que hará que el código resultante sea más declarativo y comprensible.
Los programas funcionales a menudo son más cortos y fáciles de entender que sus contrapartes imperativas. Dado que varios estudios han demostrado que la productividad promedio de un programador en términos de líneas de código es más o menos la misma para cualquier lenguaje de programación, esto también se traduce en una mayor productividad.