¿Cómo se usa la programación funcional en el desarrollo móvil?

La mayoría de la programación móvil todavía no es muy funcional, pero hay indicios de que está aumentando. Swift ciertamente tiene más características funcionales que el Objetivo C, como las sensatas funciones de orden superior. Además, con Java 8, hay más posibilidades funcionales en Java con expresiones lambda.

Recuerde también que hay formas de escribir código funcional incluso cuando no está necesariamente usando un lenguaje funcional. La programación funcional a veces se trata tanto del estilo como del lenguaje. Supongamos que tiene este código de Objetivo C de este estilo:

@property (no atómico, fuerte) XType * x;
@property (no atómico, fuerte) YType * y;
@property (no atómico, fuerte) ZType * z;

– (nulo) viewDidLoad {
[super viewDidLoad];
[self updateMyViewController];
}

– (nulo) updateMyViewController {
// Realizar lógica usando self.x, self.y
// Asigna variables self.z
}

Puede hacer que este código sea “más funcional” haciendo lo siguiente:

– (nulo) viewDidLoad {
[super viewDidLoad];
ZType * newZ = [self performLogicWithX: self.x Y: self.y]
self.z = newZ;
}

– (ZType *) performLogicWithX: (XType *) myX Y: (YType *) myY {
// Realizar lógica para obtener el valor z
volver z;
}

Consideraría esta segunda muestra “más funcional” en el sentido de que “performLogic …” ahora es una función pura. No tiene ningún efecto secundario. Toma todos los parámetros que necesita y devuelve su resultado. Por supuesto, viewDidLoad todavía tiene efectos secundarios, pero esto es inevitable. Tenemos que poner nuestros efectos secundarios en alguna parte. Solo queremos hacer que todo nuestro código sea “puro” como sea posible. Ahora podría refactorizar fácilmente la función performLogic. También es mucho más fácil de probar.

Por supuesto, a diferencia de un lenguaje funcional puro como Haskell, no puede imponer esta pureza. Otro programador podría arruinar fácilmente la pureza de performLogic. Esa es la desventaja.

Os animo a echar un vistazo a Functional Swift para obtener más ideas aquí.

Diría que la programación funcional no se usa en absoluto en el desarrollo móvil, excepto para las funciones lambda en el desarrollo de iOS: ¿Cómo escribir métodos lambda en Objective-C? (sin embargo, se podría argumentar que las funciones lambda por sí mismas, sin todos los demás elementos del paradigma FP, no son muy útiles).

Hay algunas personas que intentan usar Scala para el desarrollo de Android, pero estos son experimentos más que el desarrollo real con las herramientas adecuadas para el trabajo.

En cuanto al uso de lenguajes de programación funcionales como Haskell para el desarrollo móvil, hay algunos planes para usar Haskell para el desarrollo de iOS, pero no ha tenido mucha adopción (y más bien no lo hará con la introducción de Apple Swift).