TENTANG SAYACoding sudah 8 tahun.
6 tahun terakhir memimpin tim.
Co-founder OneBit, 5x bikin startup 2 yg berhasil
Pernah kerja di BlackBerry
REACTIVECOCOAAdalah kerangka kerja untuk pemrograman reaktif fungsionalMenyediakan APA (Antarmuka Pemrograman Aplikasi) untukmengkomposisi dan mentransformasi aliran dari suatu nilai
REACTIVECOCOAA framework for Functional Reactive Programming. Providing
API for composing and transforming stream of values
PEMROGRAMAN IMPERATIFint x = 5; int y = 3; int z = 2; z = x + y; // z = ?
y = 2;
NSLog("%@", z); // ?
PEMROGRAMAN IMPERATIFint x = 5; int y = 3; int z = 2; z = x + y; // z = ?
y = 2;
NSLog("%@", z); // ?
PEMROGRAMAN DEKLARATIFPengembang menyatakan masalah secara deklaratifFokusnya BUKAN di StateData Flow and Propagation of Change
PEMROGRAMAN FUNGSIONAL SALAH SATU CARA MEMROGRAM SECARA DEKLARATIF
Ciri-Cirinya adalah mengurangi state dan mutable data
Seperti fungsi matematika biasa.
z = f (x, y) = x + yx = 1, y = 2; z = 3x = 2; z = 4
PEMROGRAMAN REAKTIF Dynamically links the program behaviour to its continuosly updating
data stream
Contoh paling jelas : Spreadsheet
FUNGSIONAL + REAKTIF = ??links functions that observe continuous and dynamic streams of data
(inputs) to the program behaviour (outputs) in real time
REACTIVECOCOAAdalah kerangka kerja untuk pemrograman reaktif fungsionalMenyediakan APA (Antarmuka Pemrograman Aplikasi) untukmengkomposisi dan mentransformasi aliran dari suatu nilai
MAP
RACSequence *squared = [numbers.rac_sequencemap: ̂id(NSNumber *number) { return @([number intValue] * [number intValue])}];
MAP VS FORRACSequence *squared = [numbers.rac_sequencemap: ̂id(NSNumber *number) { return @([number intValue] * [number intValue])}];
NSArray *numbers = @[@4, @5, @6];NSMutableArray *mutableNums = [numbers mutableCopy];for (NSNumber *number in numbers) { [mutableNums addObject:@([number intValue] * [number intValue])];}
FILTER
RACSequence *evenNums = [numbers.rac_sequencefilter: ̂BOOL(NSNumber *number) { return @( [number intValue] % 2 == 0);}];
FOLD / REDUCE
RACSequence *products = [numbers.rac_sequencefoldLeftWithStart:@1reduce:̂id( id accumulator, id value) { return @([accumulator intValue] * [value intValue]);}];
THE "USUAL" WAY- (BOOL) isFormValid { return (self.userNameField.text.length > 0 && self.emailField.text.length > 8 && self.passwordField.text.length > 8 && [self.passwordField.text isEqual:self.passwordVerifyField.text]);}............// Kode di atas berada nun jauh di sana
#pragma mark - UITextFieldDelegate- (BOOL) textField: (UITextField *) textFieldshouldChangeCharactersInRange: (NSRange) range replacementString: (NSString*) string{ self.submitButton.enabled = [self isFormValid] return YES;}
RAC WAYRAC(self.submitButton, enabled) = [RACSignal combineLatest: @[ self.userNameField.rac_textSignal, self.emailField.rac_textSignal, self.passwordField.rac_textSignal, self.passwordField.rac_textSignal] reduce: ̂(NSString *userName, NSString *email, NSString *password, NSString *ver) { return @(userName.length > 0 && email.length > 8 && password.length > 8 && [password isEqual:ver]); }];
Menyatakan SEPERTI APA hubungannya secara deklaratif
REACTIVECOCOAPembuatan aplikasi lebih fokus ke data + UXMengurangi kompleksitas aplikasi, karena mengurangi peran'state'Kode yang terelasi, lebih dekatKode lebih bisa ditest (dengan MVVM, cek raywenderlich)
TAPI...Paradigma Baru dalam memrogram.Modal bikin iOS app sudah mahal, ditambah Cocoa/CocoaTouch, tambah ReactiveCocoaBuatan bukan ReactiveSwift masih dalam tahap pengembangan, Oktoberdirencanakan rilis
@lynxluna | [email protected]