Currying, Compose and Pipe
κΆ κΈ°μ
@doondoony
2019. 2. 16
π λͺ©μ°¨
μμ λκΉμ§ νλ€...
π λͺ©μ°¨
π ν¨μν νλ‘κ·Έλλ°?
map, filter, reduce...
λͺ°λΌ... κ·Έκ² λμΌ λ¬΄μμ...
ν¨μλμ νλ‘κ·Έλλ°μμ? μγ γ
κ·Έκ±° λ λ§ λκ² μ’μκ±°λΌκ³ ...
λΆμν¨κ³Ό... λμμ±... μ€νμμ μ ꡬμ λ°μ§ μλ...
μ€λμ λ± μ£Όμ΄μ§ μ£Όμ μλ§ μΆ©μ€νλ €κ³ ν©λλ€
μ±μκ» ν΄λ³΄λ €κ³ νλ€κ°λ μ κ° μ΄ν΄λ₯Ό λͺ»ν΄μ
Β
λͺ»λ λ°νμλ₯Ό λ μ€ν°λμλ€μκ² λ―Έμνλ€μμμ !
ν¨μν νλ‘κ·Έλλ°μ΄λ?
ν¨μν νλ‘κ·Έλλ°μ νκΈ° μ μ
μ°λ¦¬ λͺ¨λκ° μκ³ μλ κ°λ λ€
1. Spread Operator ...
μ¬μ€ μ ννκ²λ Spread, Rest Syntax μ λλ€
μ°μ°μμ νΉμ±μ ... μ μ‘΄μ¬ νμ§ μμ΅λλ€
(μ§μ° νκ°, Infix Notation ~ μ€μ νκΈ° ~ λ±)
2. Higher-Order Function
First Class Function κ³Όλ λ€λ₯Έ μλ―Έμ λλ€!
3. First Class Function
Higher-Order Function κ³Όλ λ€λ₯Έ μλ―Έμ λλ€!
ν¨μκ° μΌκΈ κ°μ²΄ (First Class Citizen)Β μμ μλ―Έ
μΈμ΄ μ°¨μμμ μ΄λ¬ν κΈ°λ₯μ μ§μ ν΄μ£Όλλμ λ°λΌ κ°λ¦°λ€
4. for ... of
Iterator Protocol μ λ°λ₯΄λ λͺ¨λ Collection κ°μ²΄λ₯Ό μνν μ μμ΅λλ€
Iterable, Iterator, Generator, Iterator Protocol μ λ€λ₯Έ λΆ λ°ν μκ°μ ν€ν€
μ°μ , Application μ΄λΌλ λ¨μ΄μ μλ―Έλ
μΉ μ ν리μΌμ΄μ μ λ§λλ μ°λ¦¬κ° μλ κ·Έ μλ―Έκ° μλ
Β
"λΆλΆ μ μ©"
무μμ λΆλΆ μ μ© νλ건κ°μ?
"ν¨μμ μΈμλ₯Ό λΆλΆμ μΌλ‘ μ μ©ν©λλ€"
Partial Application μ λΆλΆ μ μ© νμλ
λ μ΄μμ papply μμ΄ ν¨μ νΈμΆμ΄ λμ΄μΌ ν©λλ€
π Curry...?
π Curry...?
μκΉλ³΄λ€λ μ½μλ§ νμμ£ ...?
Currying μ "μ¬λ¬κ°μ μΈμλ₯Ό λ°λ ν¨μ" λ₯Ό
λ¨ν ν¨μ(Unary Function) λ‘ μͺΌκ°μ΄
λ¨ν ν¨μλ₯Ό μμ°¨μ μΌλ‘ μ¬μ©νλ κ²μ μλ―Έν©λλ€
μλ₯Ό λ€μ΄ μ΄λ κ² μ¨μ
μμμ μ§ν© X, Y, Z λ° λ ν¨μ
κ° μ£Όμ΄μ‘μλ, μ΄ λ ν¨μμ ν©μ±
λ λ€μκ³Ό κ°λ€
μ΄ λΆλΆΒ
λ§νΌμ μ΅μν©λλ€.
μ€μ²©ν΄μ ν¨μ μ¬μ©ν κ±°
Compose λ ν¨μλ₯Ό 쑰립νμ¬
μλ‘μ΄ κΈ°λ₯μ νλ ν¨μλ₯Ό ꡬμ±νλ κ²
κ·Όλ° add10 μ΄ μλλΌ λ΄κ° λ°λ‘ μ λ¬νκ³ μΆλ€λ©΄?
κ·Όλ° add10 μ΄ μλλΌ λ΄κ° λ°λ‘ μ λ¬νκ³ μΆλ€λ©΄?
Currying μ ν΅ν΄μ ν¨μλ₯Ό λ€μ ν λ² μ‘°ν©!
ν¨μ ν©μ±μ μν ν¨μλ‘λ
pipe, compose κ° μμ΅λλ€
Β
ν° μ°¨μ΄λ ν¨μ ν©μ±μ λ°©ν₯μΈλ°
pipeλ LEFT β RIGHT
composeλ RIGHT β LEFT
μ μ°¨μ΄κ° μμ΅λλ€
λ λ€λ₯Έ νΉμ§μ
pipe λ μ€ν κ²°κ³Όλ₯Ό λ°ννμ§ μκ³
ν©μ±λ ν¨μλ₯Ό λ°νν©λλ€
pipe μ ꡬν μ½λ λ§λ³΄κΈ°
μμ μ½λμμ λ³΄μ ¨κ² μ§λ§
go λ μ€ν κ²°κ³Όλ₯Ό λ°ν
pipe λ ν©μ±λ ν¨μλ₯Ό λ°ν ν©λλ€