2009-10-15 14 views

Odpowiedz

14

Można spróbować FunctionalKit

FunctionalKit jest próba wykorzystania paradygmatów funkcjonalne w Objective-C. Jest to zestaw niskopoziomowych typów funkcjonalnych API: &. Zawiera typy, takie jak, opcja, itp., Które pozwalają pisać poprawny, czysty, zwięzły, zwięzły i (jeśli to możliwe) bezpieczny kod. Zapewnia także bardziej zaawansowane koncepcje, takie jak przenoszenie funkcji w monady.

FunctionalKit

+1

Wygląda na to, że programowanie w stylu funkcjonalnym jest trudniejsze niż wbudowane lambdy i powiązane metody w 10.6, o których wspomniałem w mojej odpowiedzi. – Chuck

+2

Wypróbuj gałąź Blocks of FunctionalKit. Napisałem również system, który automatycznie zawija dowolną operację w typie opcji w środowisku uruchomieniowym, którą wkrótce udostępnię. Bloki i złe wyniki w środowisku wykonawczym sprawiają, że FunctionalKit jest bardzo przydatnym narzędziem, które szeroko stosowałem w moich ostatnich dwóch aplikacjach na iPhone'a. –

1

Objective-C nie jest funkcjonalnym językiem programowania (jest to wyraźnie proceduralne OO), więc nie widzę, jak byłoby coś takiego. Jeśli szukasz serwerów lambda i obsługi współbieżności, o to chodzi w Grand Central Dispatch w wersji 10.6.

+0

Pseudo funkcjonalne, jeśli chcesz ... Szukam czegoś w duchu http://functionaljava.org/ i http://code.google.com/p/lambdaj/ dla Java. – luvieere

+1

Uważam to za komplement, że jedyne opinie, jakie otrzymuję, są bez towarzyszących komentarzy. – Chuck

+0

Nitpick: Lambda nie jest wynikiem GCD; są one częścią tego, w jaki sposób korzystasz z GCD. Sprawdź FunctionalKit, przy okazji. W Objective-C można napisać czysty, w większości funkcjonalny i bezpieczny dla kodu kod. –

1

Można użyć Functional.m do programowania funkcyjnego w Objective-C. To sprawia, że ​​ciężkie użycia i zawiera bloki funkcjonalne swoje zwykłe podejrzanych programistycznych, takich jak mapy, zmniejszyć, filtr, odrzucić itp

9

Można także wypróbować OCTotallyLazy, port biblioteki Java TotallyLazy.

Na przykład mapowania NSArray Można to zrobić w następujący sposób:

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

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

Jest też zestaw makr dostępnych, które pozwalają na krótszy składni, na przykład:

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

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

Zapewnia również własny typ kolekcji Sekwencja, która leniwie ocenia mapy, filtry itp.

+1

Oto przewodnik użycia TotallyLazy: http://intrepidis.blogspot.com/2013/07/using-totallylazy-functional-library.html –