Cómo evaluar qué tan bien se conoce la programación funcional [cerrado]

7

Me he estado preguntando cómo determinar si la programación funcional. Por conocimiento me refiero en un sentido Journeyman, no un maestro, pero lo suficientemente competente como para hacer el trabajo.

Me gustan los idiomas con construcciones de configuración de consulta / datos incorporadas, pero es conocer los entresijos de los mapas, filtros y agregados en forma de Linq , Sql y Reactive Extensions suficiente para afirmar que ¿Se sabe programación funcional? ¿O se requieren conceptos y habilidades específicas adicionales?

Edit: He estado trabajando en OO e idiomas que se identifican principalmente como idiomas de OO durante 15 años. Como no estoy en un entorno que se autoidentifique como funcional, no hay mucho que medir.

¿Es evitar el estado inmutable y saber cómo usar fold todo lo que hay?

    
pregunta Scott Weinstein 24.07.2011 - 19:20

2 respuestas

3

La respuesta de Dakotah es importante y me gustaría agregar un par de cosas:

  • Entendiendo las mónadas.
  • Comprender la optimización de llamadas de Tail (TCO) y por qué es importante y cómo lo implementa el lenguaje en cuestión.
  • Comprender las estructuras de datos persistentes y cómo implementar un uno a mano.

Estoy bastante seguro de que hay muchas cosas, siéntase libre de completar la lista.

    
respondido por el Chiron 25.07.2011 - 14:49
3

El primer paso para poder reconocer la diferencia entre los estilos imperativo y funcional en el código. Por ejemplo, Odersky en Programación en Scala destaca que un signo revelador es

  

que si el código contiene vars [variables en Scala que pueden ser   modificado] es probablemente un estilo imperativo. Si el código no contiene vars en absoluto, es decir, solo contiene vals, es probable que esté en un estilo funcional. Una forma de avanzar hacia un estilo funcional, por lo tanto, es intentar programar sin vars.

Por ejemplo, considera esto mientras bucle:

var i = 0
while (i < args.length) {
   println(args(i))
   i+=1
}

La var es el signo que es imperativo. Esto es lo que Scala se convertiría

def printargs(args: Array[String]): Unit = {
    args.foreach(println)
}

Pero este código no es puramente funcional todavía porque tiene efectos secundarios.

Desde un punto de vista funcional, esto debería ser:

def formatArgs(args: Array[String]) = args.mkString("\n")

Entonces ... para determinar si conoces la programación funcional, ¿estás escribiendo código sin el equivalente de vars y no tienes efectos secundarios locales?

    
respondido por el Dakotah North 25.07.2011 - 04:25

Lea otras preguntas en las etiquetas