2009-10-15 14 views

Antwort

14

Sie könnten FunctionalKit

FunctionalKit versuchen ist ein Versuch, funktionelle Paradigmen in Objective-C zu verwenden. Es ist eine Reihe von Low-Level-Funktionstypen & APIs. Es enthält Typen wie entweder, Option usw., die es Ihnen ermöglichen, korrekten, sauberen, engen, prägnanten und (wenn möglich) typsicheren Code zu schreiben. Es bietet auch erweiterte Konzepte wie das Heben von Funktionen in Monaden.

FunctionalKit

+1

Es sieht so aus, als würde dies die Programmierung im funktionalen Stil härter machen als die eingebauten Lambdas und zugehörigen Methoden in 10.6, die ich in meiner Antwort erwähnt habe. – Chuck

+2

Probieren Sie den Block Blocks von FunctionalKit aus. Ich habe auch ein System geschrieben, das automatisch jede Operation in einen Optionstyp zur Laufzeit umschließt, die ich in Kürze veröffentlichen werde. Blöcke und Runtime-Badassery machen FunctionalKit zu einem sehr nützlichen Tool, das ich in meinen letzten beiden iPhone-Anwendungen ausgiebig genutzt habe. –

1

Objective-C ist keine funktionale Programmiersprache (es ist ganz offensichtlich prozedurale OO), also sehe ich nicht, wie es so etwas geben würde. Wenn Sie nach Unterstützung für Lambda und Nebenläufigkeit suchen, ist Grand Central Dispatch in 10.6 dafür da.

+0

Pseudo-funktional, wenn Sie mögen ... Ich suche etwas im Geiste von http://functionaljava.org/ und http://code.google.com/p/lambdaj/ für Java. – luvieere

+1

Ich nehme es als ein Kompliment, dass die einzigen Downvotes, die ich bekomme, ohne begleitende Kommentare sind. – Chuck

+0

Nitpick: Lambdas sind kein Ergebnis von GCD; Sie sind ein Teil davon, wie Sie GCD verwenden. Schauen Sie sich FunctionalKit übrigens an. Es ist möglich, in Objective-C sauberen, meist funktionalen und typsicheren Code zu schreiben. –

1

Sie können Functional.m für funktionale Programmierung in Objective-C verwenden. Es macht intensiven Gebrauch von Blöcken und enthält Ihre üblich funktionale Programmierung Verdächtigen, wie Karte, reduziert, Filter, ablehnen usw.

9

Sie könnten auch OCTotallyLazy ausprobieren, einen Port der Java-Bibliothek TotallyLazy.

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

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

Es gibt auch eine Reihe von Makros zur Verfügung, die für eine kürzere Syntax erlauben, zum Beispiel:

Zum Beispiel eines NSArray Abbildung kann wie folgt durchgeführt wird

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

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

Es bietet auch eine eigene Sammlertyp, Sequence, die Karten, Filter, etc. lazily bewertet

+1

Hier finden Sie eine Anleitung zur Verwendung von TotallyLazy: http://intrepidis.blogspot.com/2013/07/using-totallylazy-functional-library.html –

Verwandte Themen