Ya que finalizamos los principales paradigmas de programación imperativos, o al menos los que habíamos listado en esta categoría, considero que es momento de adentrarnos en otro campo donde veremos otras filosofías algo distintas a la hora de programar, y precisamente empezaremos con la programación funcional.
Según definición de Wikipedia, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. La programación funcional elige prescindir de datos de estado o mutables para centrarse en la resolución del problema mediante mecanismos puramente matemáticos basados en funciones.
Esto choca principalmente con las bases de los paradigmas imperativos, ya que éstos últimos se basan en la aplicación de dichos estados y de sus cambios para la automatización a la hora de resolver una operación.
Los intrínsecos mecanismos de la programación funcional arraigan directamente del revolucionario sistema de funciones recursivas lambda; ésta forma de cálculo fue usada por Alonzo Church y Stephen Kleene para resolver el mítico Entscheidungsproblem (Problema de decisión), un problema lógico de dictaminación acerca de teoremas.
En definitiva éste paradigma compite con la principal debilidad de la programación imperativa, y es que salvo usando funciones, como concepto más allá del plano matemático, se evita con creces el famoso cúmulo de "efectos secundarios" referidos al hecho de que cambiar valores en manos de la programación imperativa supone el cambio de los resultados incluso tras la realización del procedimiento, por lo que el uso de funciones aporta transparencia referencial al software en tiempo de ejecución, asegurando valores correctamente establecidos y sin cambios durante el transcurso del mismo.
Sin embargo, más por el costoso uso que por su alcance operativo, éste paradigma está popularmente etiquetado dentro del campo académico, no soliendo ser el predilecto de recomendación para el desarrollo comercial de aplicaciones, exceptuando el caso de lenguajes como Scheme, Haskell, Erlang, Objective Caml o Rust, los cuales han sido utilizados en aplicaciones comerciales e industriales por muchas organizaciones.
La programación funcional encuentra hueco en la industria gracias también a lenguajes de dominio específico como pueden ser Mathematica (usado en matemáticas simbólicas), R (estadística), J y K (finanzas), F# en Microsoft.NET o XSLT (XML).
Algunos lenguajes de uso específico usados comúnmente como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de programación funcional.
Algunos lenguajes de uso específico usados comúnmente como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de programación funcional.
El principal objetivo de la programación funcional es lograr lenguajes expresivos y matemáticamente elegantes, sin necesidad de bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y así evitar el concepto de estado del cómputo.
Características de la Programación Funcional
Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos colaterales.
Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).
Funciones de primera clase y de orden superior: Son funciones que pueden tomar otras funciones como argumentos o devolverlos como resultados. En cálculo , un ejemplo de una función de orden superior es el operador diferencial d / dx , que devuelve la derivada de una función f .
Funciones puras: Carecen de los "efectos secundarios" propios de la programación imperativa, permitiendo además mejorar el rendimiento del código, por ejemplo, elimina valores en desuso, aplica transparencia referencial, independencia de datos o uso de "poda" eliminando de esta forma completamente efectos contraproducentes para la ejecución óptima del código.
Recursividad: Las iteraciones en los lenguajes funcionales son normalmente llevadas a cabo mediante la recursividad. Las funciones recursivas son entonces aquellas que se invocan a sí mismas, permitiendo que una operación se realice una y otra vez hasta alcanzar el caso base, lo cual supone condicionar la repetición de una función creando así patrones sencillos que lograrían el efecto de un bucle.
Evaluación estricta: Al evaluar cualquier término que contenga un subtérmino fallido, dicho evaluado no se aprobará.
Pre-asunción de los tipos primitivos: La programación funcional implementa la declaración de los datos primitivos sin necesidad de que el programador lo haga tras su primera declaración.
Adaptación multilenguaje: Puede aplicarse en múltiples lenguajes, e incluso en algunos que no han sido orientados de forma directa a ésta metodología.
Pero bueno, la teoría cansa un poco, lo sé :) Por eso a continuación les dejaré una serie de videos que encontré en los cuales se crea una aplicación usando la filosofía de la programación funcional:
Fuente:
http://linceus.blogspot.com.es/2014/03/paradigmas-de-la-programacion-v.html
Con estos tutoriales termino esta entrada dedicada a la programación funcional. Por ahora me despido, pero continuaremos con esta serie dedicada a los paradigmas de programación en el próximo artículo en el cual hablaremos de la programación funcional.
==> Artículo 6: Paradigmas de Programación VI: Programación Lógica
No hay comentarios.:
Publicar un comentario