Fortalezas de la programación funcional





¡Oye! Mi nombre es Katerina y tengo los sentimientos más cálidos por la programación funcional, uso el lenguaje funcional de manera continua e incluso enseño un poco.



Nuestro principal lenguaje de desarrollo en Typeable es Haskell, y mientras todos discutían sobre si Haskell estaba listo para la producción, simplemente lo usamos y lo consideramos una ventaja competitiva. Nos gustaría compartir nuestra opinión basada en esta experiencia.



Cómo FP mejora la programación



La programación funcional es bastante popular en este momento, y los elementos FP comenzaron a aparecer en muchos lenguajes imperativos, como funciones lambda, aplicación parcial (currying), funciones de orden superior (mapa, filtro, convoluciones). En algún lugar, estos préstamos se ven bien, pero en algún lugar conducen a una sintaxis extranjera bastante extraña. Pero el paradigma de la programación es un enfoque que vive en la cabeza del programador y no es, en general, parte del lenguaje. En un grado u otro, cualquier lenguaje soporta diferentes paradigmas y sus diseños permiten desarrollar programas en diferentes estilos. Si vale la pena desarrollar en un estilo funcional es una pregunta abierta, y cada desarrollador la responde en función de sus preferencias, capacidades lingüísticas y otras consideraciones.



Creemos que usar el estilo funcional en lenguajes imperativos, o mejor aún, un lenguaje funcional, especialmente los de tipo estático, ayudará a mejorar el código, a saber:



  1. El código se volverá más conciso y expresivo. La "expresividad" se puede definir como el número de ideas por unidad de código y, en general, los lenguajes funcionales, al ser de nivel superior, también son más expresivos. Por ejemplo, la transformación de cada elemento en una matriz o lista se realiza en una sola línea funcional (usando map / foreach / anything y una función anónima), mientras que en un estilo imperativo uno tendría que organizar un bucle, declarar una variable para un contador o iterador, y use una asignación explícita. Para ejemplos más complejos, la diferencia en expresividad solo aumenta.
  2. . « » . , . , , , - , : , (, ) , . , . ( ), « » . , , , . (working memory), , . , . — . , , C, SOLID GoF-, , , .



  3. . — , . : , , . , , , ? . «» , , « ».
  4. El código será más fácil de depurar y probar. Este punto se deriva de los dos anteriores: tenemos un conjunto de funciones pequeñas, algunas de las cuales son puras, es decir sabemos que su resultado depende solo de la entrada. El código se vuelve más fácil de depurar; solo necesita verificar qué funciones utilizadas regresan por separado para comprender cómo funcionarán juntas. Es igual de fácil escribir pruebas unitarias para la lógica "limpia" de su aplicación. 


Cómo FP mejora al programador









A continuación, me gustaría compartir mi experiencia que no está directamente relacionada con la escritura de programas en lenguajes funcionales, y contarles qué más el conocimiento y uso de FP fue útil para mí y puede ser útil para usted:



  1. , -. - , . , «» « » , , . , : , , Haskell, Brainfuck, Piet. . , .
  2. , , computer science. , . , , - , , .
  3. . , « » , , . , . , . , , , . , , - , - , . , , .
  4. : Haskell! , Haskell, . , Haskell-, . - . «» «» , , . , , «Haskell-». , , . , , . . , , , , . , , , . , : — ! 


Conclusión



La llegada de elementos FP en lenguajes de desarrollo industrial populares como Python, C ++, Kotlin, Swift, etc., confirma que este enfoque es realmente útil y tiene puntos fuertes. La aplicación del estilo funcional permite un código más robusto que es más fácil de dividir, generalizar y probar, independientemente del lenguaje de programación. Por supuesto, un lenguaje funcional le permite aprovechar al máximo estos beneficios al proporcionar construcciones naturales con un alto grado de expresividad.



Hay una gran cantidad de lenguajes funcionales, pero, como nos parece, en este momento los más convenientes y útiles para el desarrollo son los que usan tipado estático. Esto le permite detectar muchos errores durante la compilación y expresar parte de la lógica de la aplicación a nivel de tipo.



En conclusión, quiero desear que todos no tengan miedo de utilizar enfoques alternativos y los prueben en la práctica, incluso si serán útiles únicamente para su autodesarrollo.



All Articles