2009-10-15 13 views

Respuesta

14

Usted podría intentar FunctionalKit

FunctionalKit es un intento de utilizar paradigmas funcionales en Objective-C. Es un conjunto de tipos funcionales de bajo nivel & API. Contiene tipos tales como, opción, etc. que le permiten escribir código de seguridad correcto, limpio, ajustado, sucinto y (cuando sea posible). También proporciona conceptos más avanzados, como funciones de elevación en mónadas.

FunctionalKit

+1

Parece que esto realmente hace que la programación de estilo funcional sea más difícil que las lambdas incorporadas y los métodos asociados en 10.6 que mencioné en mi respuesta. – Chuck

+2

Pruebe la rama Bloques de FunctionalKit. También escribí un sistema para ajustar automáticamente cualquier operación en un tipo de Opción en tiempo de ejecución, que lanzaré pronto. Los bloques y el badassery de tiempo de ejecución hacen de FunctionalKit una herramienta muy útil, que he utilizado ampliamente en mis dos aplicaciones de iPhone más recientes. –

1

Objective-C no es un lenguaje de programación funcional (es muy claro OO de procedimiento), por lo que no veo cómo habría tal cosa. Si está buscando compatibilidad con lambdas y simultaneidad, para eso está Grand Central Dispatch en 10.6.

+0

Pseudo-funcional, si te gusta ... Estoy buscando algo en el espíritu de http://functionaljava.org/ y http://code.google.com/p/lambdaj/ para Java. – luvieere

+1

Considero un cumplido que los únicos votos negativos que recibo son sin comentarios de acompañamiento. – Chuck

+0

Nitpick: Lambdas no son un resultado de GCD; son parte de cómo usas GCD. Echa un vistazo a FunctionalKit, por cierto. Es posible escribir código limpio, principalmente funcional y seguro en Objective-C. –

1

Puede utilizar Functional.m para la programación funcional en Objective-C. Se hace un uso intensivo de los bloques y contiene los sospechosos habituales de programación funcional, como un mapa, reducir, filtrar, rechazar, etc

9

También podría probar OCTotallyLazy, un puerto de la biblioteca de Java TotallyLazy.

Por ejemplo, la cartografía de un NSArray se puede hacer de la siguiente manera:

[array(@"one", @"two", @"three", nil) map:^(NSString *item){ 
    return [item uppercaseString]; 
}]; 

// Returns array(@"ONE", @"TWO", @"THREE", nil) 

También hay un conjunto de macros disponibles que permiten una sintaxis más corta, por ejemplo:

#define TL_LAMBDA_SHORTHAND 
[array(@"one", @"two", @"three", nil) map:_([_ uppercaseString])]; 

// Returns array(@"ONE", @"TWO", @"THREE", nil) 

También proporciona su propio tipo de colección, Sequence, que evalúa los mapas, los filtros, etc.

+1

Aquí hay una guía sobre cómo usar TotallyLazy: http://intrepidis.blogspot.com/2013/07/using-totallylazy-functional-library.html –

Cuestiones relacionadas