2009-10-15 5 views

Répondre

14

Vous pouvez essayer FunctionalKit

FunctionalKit est une tentative d'utiliser des paradigmes fonctionnels en Objective-C. C'est un ensemble de types fonctionnels de bas niveau & APIs. Il contient des types tels que l'un ou l'autre, l'option, etc. qui vous permettent d'écrire un code correct, propre, serré, concis et (si possible) sûr. Il fournit également des concepts plus avancés tels que le levage de fonctions en monades.

FunctionalKit

+1

Il semble que cela rende la programmation de style fonctionnel plus difficile que les lambdas intégrés et les méthodes associées dans 10.6 que j'ai mentionné dans ma réponse. – Chuck

+2

Essayez la branche Blocks de FunctionalKit. J'ai également écrit un système pour envelopper automatiquement toute opération dans un type d'option à l'exécution, que je publierai bientôt. Blocks et badassery au runtime font de FunctionalKit un outil très utile, que j'ai largement utilisé dans mes deux applications iPhone les plus récentes. –

1

Objective-C est pas un langage de programmation fonctionnelle (il est tout à fait clairement la procédure OO), donc je ne vois pas comment il y aurait une telle chose. Si vous recherchez un support de lambda et de simultanéité, c'est ce que Grand Central Dispatch est en 10.6.

+0

si vous aimez Pseudo-fonctionnel, ... Je cherche quelque chose dans l'esprit de http://functionaljava.org/ et http://code.google.com/p/lambdaj/ pour Java. – luvieere

+1

Je prends comme un compliment que les seules downvotes que je reçois sont sans commentaires d'accompagnement. – Chuck

+0

Nitpick: Lambdas ne sont pas un résultat de GCD; ils font partie de la façon dont vous utilisez GCD. Découvrez d'ailleurs FunctionalKit. Il est possible d'écrire du code propre, principalement fonctionnel et typé-sécurisé dans Objective-C. –

1

Vous pouvez utiliser Functional.m pour la programmation fonctionnelle en Objective-C. Il utilise beaucoup de blocs et contient vos suspects de programmation fonctionnels habituels, comme la carte, réduire, filtre, rejeter, etc.

9

Vous pouvez également essayer OCTotallyLazy, un port de la bibliothèque Java TotallyLazy.

Par exemple, la cartographie NSArray peut se faire comme suit:

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

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

Il y a aussi un ensemble de macros disponibles qui permettent une syntaxe plus courte, par exemple:

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

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

Il fournit également son propre type de collecte, séquence, qui évalue paresseusement cartes, filtres, etc.

+1

Voici un guide sur l'utilisation de TotallyLazy: http://intrepidis.blogspot.com/2013/07/using-totallylazy-functional-library.html –

Questions connexes