Functional Reactive Programming dengan ReactiveCocoa

download Functional Reactive Programming dengan ReactiveCocoa

of 34

Embed Size (px)

description

This is my talks on last iOS meetup in Jogja Digital Valley. Slide written both in English and Bahasa indonesia.

Transcript of Functional Reactive Programming dengan ReactiveCocoa

  • 1. PEMROGRAMAN REAKTIFFUNGSIONALMENGGUNAKAN REACTIVECOCOA

2. TENTANG SAYACoding sudah 8 tahun.6 tahun terakhir memimpin tim.Co-founder OneBit, 5x bikin startup 2 yg berhasilPernah kerja di BlackBerry 3. REACTIVECOCOAAdalah kerangka kerja untuk pemrograman reaktif fungsionalMenyediakan APA (Antarmuka Pemrograman Aplikasi) untukmengkomposisi dan mentransformasi aliran dari suatu nilai 4. SAPARATOZ! 5. REACTIVECOCOAA framework for Functional Reactive Programming. ProvidingAPI for composing and transforming stream of values 6. WAIT, WHAT? 7. PEMROGRAMAN IMPERATIFint x = 5;int y = 3; int z = 2; z = x + y; // z = ?y = 2;NSLog("%@", z); // ? 8. PEMROGRAMAN IMPERATIFint x = 5;int y = 3; int z = 2; z = x + y; // z = ?y = 2;NSLog("%@", z); // ? 9. PEMROGRAMAN DEKLARATIFPengembang menyatakan masalah secara deklaratifFokusnya BUKAN di StateData Flow and Propagation of Change 10. PEMROGRAMAN FUNGSIONAL SALAH SATU CARA MEMROGRAM SECARA DEKLARATIFCiri-Cirinya adalah mengurangi state dan mutable dataSeperti fungsi matematika biasa.[G YZ Y 11. ZYZ [Y [ 12. PEMROGRAMAN REAKTIF Dynamically links the program behaviour to its continuosly updatingdata streamContoh paling jelas : Spreadsheet 13. FUNGSIONAL + REAKTIF = ??links functions that observe continuous and dynamic streams of data(inputs) to the program behaviour (outputs) in real time 14. REACTIVECOCOAAdalah kerangka kerja untuk pemrograman reaktif fungsionalMenyediakan APA (Antarmuka Pemrograman Aplikasi) untukmengkomposisi dan mentransformasi aliran dari suatu nilai 15. REACTIVECOCOAMemfasilitasi FRP di Objective-C 16. SEQUENCEPull-Driven 17. SIGNALPush-Driven 18. SIGNALPush-Driven 19. STREAM TRANSFORMATION 20. MAPRACSequence *squared = [numbers.rac_sequencemap: ^id(NSNumber *number) {return @([number intValue] * [number intValue])}]; 21. 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])];} 22. FLATMAP 23. FILTERRACSequence *evenNums = [numbers.rac_sequencefilter: ^BOOL(NSNumber *number) {return @( [number intValue] % 2 == 0);}]; 24. FOLD / REDUCERACSequence *products = [numbers.rac_sequencefoldLeftWithStart:@1reduce:^id( id accumulator, id value) {return @([accumulator intValue] * [value intValue]);}]; 25. COMBINELATEST / REDUCE 26. APPLYING TO AN APPSTUDY CASE? FORM VALIDATION 27. THE USUAL WAY- (BOOL) isFormValid{return (self.userNameField.text.length0 self.emailField.text.length8 self.passwordField.text.length8 [self.passwordField.textisEqual:self.passwordVerifyField.text]);} ............// Kode di atas berada nun jauh di sana#pragma mark - UITextFieldDelegate- (BOOL) textField: (UITextField *) textFieldshouldChangeCharactersInRange: (NSRange) rangereplacementString: (NSString*) string{self.submitButton.enabled = [self isFormValid]return YES;} 28. JSON Call?Activity Indicator?Button Disable selama JSON Calldst dsb dkk dll... 29. 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.length0email.length8 password.length8 [password isEqual:ver]);}];Menyatakan SEPERTI APA hubungannya secara deklaratif 30. DEMO / PRACTISE 31. SELANJUTNYA... MVC?Cek Ray Wenderlich Tutorial tentang MVVM 32. 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) 33. TAPI...Paradigma Baru dalam memrogram.Modal bikin iOS app sudah mahal, ditambah Cocoa/CocoaTouch, tambah ReactiveCocoaBuatan bukan ReactiveSwift masih dalam tahap pengembangan, Oktoberdirencanakan rilis 34. @lynxluna | lynxluna@gmail.com