30
송치원 (곰튀김) iamchiwon.github.io Functional Reactive Programming Paradigm

20171104 FRP 패러다임

  • Upload
    -

  • View
    459

  • Download
    3

Embed Size (px)

Citation preview

송치원�(곰튀김)�iamchiwon.github.io

Functional Reactive Programming Paradigm

Immutable

Side Effect

Pure FunctionComposition

Iterator

Generator

Function

Reduce

Map

Consumer

First-Class Citizen

High-Order Function

Imperative Programming

Declarative Programming

Reactive

RxSwift

Stream

Asynchronous

Terms

Functional Programming

Event Stream

Data Stream

Filter

FunctionalReactiveProgrammingParadigm

Contents

FunctionalReactive

ProgrammingParadigm

Contents

Programming

Program

input output

Paradigm

https://ko.wikipedia.org/wiki/패러다임

Paradigm

Low memory

Optimized

Medium Memory High memory

Concurrency

Performance / Responsibility

Data : Program = 1:1

Reusable

Abstract Data

Low Memory Mass Production Concurrency

Functional

Data

Program Program Program Program

Functional

Data

Program Program Program Program

Immutable

Functional

Side-Effect

Pure function

Functional

Functional

Composition

Generator

Function

Consumer

Functional

First Class CitizenHigh-Order function

Functional

OOP�김밥만들기

Functional

FP�김밥만들기

Functional

Imperative�programming�명령형�프로그래밍

Declarative�programming�선언형�프로그래밍

commands

functions

Functional

•데이터는�immutable�하게�취급하자�

•데이터�변경이�필요할�때는�새로�만들자�

•Side-Effect�을�없애기�위해서�Pure�Function�을�사용하자�

•Function�들의��Composition과�High-Order�Function으로�프로그램을�만들자�

•Data가�아닌�Process에�집중해서�프로그램을�만들자

Functional

ISSUE Expensive job

Async job

Wait

?

Callback

Delegate

Reactive

https://en.wikipedia.org/wiki/Reactive_programming

In computing, reactive programming is an asynchronous programming paradigm concerned with data streams

and the propagation of change.

Reactive

Reactive Libraries

Reactive Extension Java, JS, .NET, Scala, Swift, Python, … http://reactivex.io/

ReactiveCocoa Objective-C https://github.com/ReactiveCocoa/ReactiveCocoa

ReactiveSwift Swift https://github.com/ReactiveCocoa/ReactiveSwift

Sodium Java, JS, Swift, Kotlin, C, Rust https://github.com/SodiumFRP

ReactFX Java https://github.com/TomasMikula/ReactFX

Reactive-Banana Haskell http://wiki.haskell.org/Reactive-banana

Bacon.JS JS https://baconjs.github.io/

Kefir.JS JS https://rpominov.github.io/kefir/

Flapjax JS http://www.flapjax-lang.org/

Reactive

Generator

Consumer

map

Filter

Reduce

Stream

Observable

Subscriber

Operator

Reactive

getText

Subscribe

Text

1

2

3

url

Reactive

Reactive

Reactive

pod ‘RxSwift’ import RxSwift

Reactive

Reactive pod ‘RxSwift’ import RxSwift

Reactive pod ‘RxCocoa’ import RxCocoa

Reactive

•Async�한�처리를�Functional�하게�처리하자�

•리턴값은�Stream인�Observable을�반환하자�

•Stream�에�흐르는�Data/Event�를�Operator�로�처리하자�

•Stream과�Stream을�연결하자�

•Data가�아닌�Process에�집중해서�프로그램을�만들자

Functional�Side-Effect�가�없도록�프로그래밍�하는�패러다임�

Reactive�Async�한�작업을�Functional�하게�처리하는�아이디어�

RxSwift�Reactive�아이디어를�구현한�Swift�라이브러리

Summary