MY AFFAIR
REACTIVECOCOA
with
FUNCTIONAL
REACTIVE
PROGRAMMING
FUNCTIONAL
REACTIVE
PROGRAMMING
// Imperative programming
var x = 1, y = 2, z = y + x;
console.log(z); //3
x = 2;
console.log(z); //3
// Reactive programming
var x = 1, y = 2, z = y + x;
console.log(z); //3
x = 2;
console.log(z); //4
FUNCTIONAL
PROGRAMMING
REACTIVE
FUNCTIONAL PROGRAMMING
DECLARATIVE EVALUATION OF PURE
FUNCTIONS TO CREATE IMMUTABLE
PROGRAMS AND SO AVOID SIDE
EFFECTS THAT ARE EXTERNALLY
OBSERVED.
PURE FUNCTIONS
DECLARATIVE PROGRAMMING
REFERENTIAL TRANSPARENCY
INMUTABILITY
// Imperative programming
var arrayFoo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (var i = 0; i < arrayFoo.length; i++) {
arrayFoo[i] = Math.pow(arrayFoo[i], 2);
}
array; // [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
// Declarative programming
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(num => Math.pow(num, 2));
// [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
PURE FUNCTIONS
DECLARATIVE PROGRAMMING
REFERENTIAL TRANSPARENCY
INMUTABILITY
// Impure function
var likes = 0;
function addLike() {
return ++likes;
}
// Pure function
function addLike(likes) {
return ++likes;
}
addLike(addLike(0)); // 2
DECLARATIVE PROGRAMMING
REFERENTIAL TRANSPARENCY
INMUTABILITY
PURE FUNCTIONS
// Referential transparent function
int plusOne(int x)
{
return x+1;
}
// Referential opaqueness function
int G = 10;
int plusG(int x)
{//G can be modified externally returning different values.
return x + G;
}
DECLARATIVE PROGRAMMING
REFERENTIAL TRANSPARENCY
INMUTABILITY
PURE FUNCTIONS
// Referential transparent function
int plusOne(int x)
{
return x+1;
}
// Referential opaqueness function
int G = 10;
int plusG(int x)
{//G can be modified externally returning different values.
return x + G;
}
REACTIVE
PROGRAMMING
FUNCTIONAL
: https://goo.gl/NaMmJ
: https://goo.gl/sGSwMS
Reactive programming is
programming with asynchronous data streams.
A stream is a sequence of ongoing events ordered in time.
HANDS ON!
// RxSwift LoginViewModel
struct LoginViewModel {
let usernameBGColor: Driver<UIColor>
let passwordBGColor: Driver<UIColor>
let credentialsValid: Driver<Bool>
init(usernameText: Driver<String>, passwordText: Driver<String>) {
let usernameValid = usernameText
.distinctUntilChanged()
.throttle(0.3)
.map { $0.utf8.count > 3 }
let passwordValid = passwordText
.distinctUntilChanged()
.throttle(0.3)
.map { $0.utf8.count > 3 }
usernameBGColor = usernameValid
.map { $0 ? BG_COLOR : UIColor.white }
passwordBGColor = passwordValid
.map { $0 ? BG_COLOR : UIColor.white }
credentialsValid = Driver.combineLatest(usernameValid, passwordValid) { $0 && $1 }
}
func login(_ username: String, password: String) -> Observable<AutenticationStatus> {
return AuthManager.sharedManager.login(username, password: password)
}
Functional Reactive Programming

Functional Reactive Programming