πŸ’» ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(go, pipe, curry)

waterglassesΒ·2022λ…„ 3μ›” 29일
0

TIL

λͺ©λ‘ 보기
8/50
post-thumbnail

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œ go, pipe, curry λͺ¨λ‘ μ²˜μŒλ“€μ–΄λ΄€λ‹€. 맀일맀일 μƒˆλ‘œμš΄ 지식이 μŸμ•„μ Έ λ‚˜μ˜¨λ‹€.😭 이해가 잘 가지 μ•Šμ•„μ„œ ν•œμ°Έμ„ μ‹€μŠ΅ν•΄λ³΄μ•˜λ‹€. go, pipe, curryλ₯Ό 정리해보도둝 ν•˜κ² λ‹€!

πŸ“ƒ 였늘 κ³΅λΆ€ν•œ 것

읽기 쒋은 μ½”λ“œλ‘œ λ§Œλ“€κΈ°!

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ λ‹€λ£° 수 μžˆμ–΄μ„œ μ½”λ“œλ₯Ό 가독성 μ’‹κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.
μ€‘μ²©λ˜μ–΄ μžˆλŠ” μ½”λ“œλŠ” 가동성이 많이 떨어지기 λ•Œλ¬Έμ— go, pipe, curryλ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„λ ₯을 λ†’μ—¬ 가독성을 μ’‹κ²Œ λ§Œλ“€μž!

go

goλŠ” ν•¨μˆ˜μ™€ 인자λ₯Ό μ „λ‹¬ν•΄μ„œ μ¦‰μ‹œ μ–΄λ–€ 값을 ν‰κ°€ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

const reduce = (f, acc, iter) => {
    if (!iter) {
        iter = acc[Symbol.iterator]();
        acc = iter.next().value;
    }
    for (const a of iter) {
        acc = f(acc, a);
    }
    return acc;
};

const go = (...args) => reduce((a, f) => f(a), args);

go(
    0,
    a => a + 1,
    a => a + 10,
    a => a + 100,
    log
);
// 111

go의 첫번째 μΈμžμ—λŠ” μ‹œμž‘ν•˜κΈ° μœ„ν•œ 값을 λ„£κ³  λ‚˜λ¨Έμ§€ μΈμžμ—λŠ” ν•¨μˆ˜λ“€μ„ λ°›μ•„ λ‹€μŒ ν•¨μˆ˜λ‘œ λ„˜κΈ°λ©΄μ„œ μ°¨λ‘€λŒ€λ‘œ μ‹€ν–‰ν•˜λŠ” 것이닀.

pipe

ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λ‘œ, ν•¨μˆ˜λ“€μ΄ λ‚˜μ—΄λ˜μ–΄ μžˆλŠ” ν•©μ„±λœ ν•¨μˆ˜λ₯Ό λ§Œλ“ λ‹€.
νŒŒμ΄ν”„λΌμΈμ€ 각 μš”μ†Œμ˜ 좜λ ₯이 λ‹€μŒ μš”μ†Œμ˜ μž…λ ₯이 λ˜λ„λ‘ λ°°μ—΄λœ 처리 μš”μ†Œμ˜ 체인으둜 κ΅¬μ„±λœ 것이라고 ν•œλ‹€. 즉, νŒŒμ΄ν”„ ν•¨μˆ˜λŠ” ν•¨μˆ˜λ“€μ„ ν•˜λ‚˜λ‘œ ν•©μ„±ν•œ ν›„ λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λ‘œ, λ¦¬ν„΄λœ ν•¨μˆ˜λŠ” 인자λ₯Ό λ°›μ•„ ν•¨μˆ˜λ“€μ„ μ μš©ν•˜λ©° 값을 λ¦¬ν„΄ν•œλ‹€.

const pipe = (...fs) => (a) => go(a, ...fs);

pipe ν•¨μˆ˜μ— ...fs 인자λ₯Ό λ°›κ³  ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•œλ‹€. λ¦¬ν„΄λœ ν•¨μˆ˜λŠ” 이 인자λ₯Ό λ°›μ•„ ν•¨μˆ˜λ“€μ„ λ°›μ•„ ν•¨μˆ˜λ“€μ„ μ μš©ν•˜λ©° 값을 λ¦¬ν„΄ν•œλ‹€.

const f = pipe(
    a => a + 1,
    a => a + 10,
    a => a + 100
);

console.log(f(0)); // 111

curry

μ—¬λŸ¬ 개의 인수λ₯Ό 각각 ν•˜λ‚˜μ˜ 인수만 μ·¨ν•˜λŠ” ν•¨μˆ˜λ₯Ό 일련의 ν•¨μˆ˜λ‘œ λΆ„ν•΄ν•˜λŠ” κ²ƒμœΌλ‘œ λ§ν•œλ‹€.

const curry = f =>
    (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._);

즉, μ—¬λŸ¬ 개의 μΈμžκ°€ ν•„μš”ν•œλ° ν•˜λ‚˜μ˜ 인자만 λ°›μ•˜μ„ 경우 λ‹€μŒ 인자λ₯Ό 받을 수 μžˆλ„λ‘œ λΌλ‹€λ¦¬λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 것이닀.

κ°„λ‹¨ν•˜κ²Œ λ§ν•˜λ©΄ func(1, 2, 3)이 μ•„λ‹Œ func(1)(2)(3) 이런 방식이닀.

πŸ˜μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

μ–΄μ œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 였늘 배운 λ‚΄μš© μ „λΆ€.. μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©μ΄λ‹€.^0^
λ„ˆλ¬΄ λ„ˆλ¬΄ λ„ˆλ¬΄ μƒˆλ‘œμ›€.. λ„ˆλ¬΄ μƒˆλ‘œμ›Œμ„œ κ·ΈλŸ°κ°€..? 낯을 κ°€λ¦¬κ²Œ λ˜λ‚˜λ΄πŸ˜–

πŸ”₯ λŠλ‚€μ 

go, pipe, curry 정말 🀯 λ‡Œκ°€ ν„°μ Έλ²„λ¦¬λŠ” 쀄 μ•Œμ•˜λ‹€.
이게 λ§žλ‚˜..? μž¬λ―ΈλŠ” μžˆλ‹€λ§Œ.. ν•˜ν•˜
μ˜€λŠ˜μ€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ κ°œλ… μœ„μ£Όλ‘œ λ°°μ› μ§€λ§Œ μ‹€μŠ΅μ„ 해보고 자주 μ μš©ν•΄λ΄μ•Ό μ΅μˆ™ν•΄μ§ˆ 것 κ°™λ‹€.ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°.. μ§„μ§œ λ„ˆλ¬΄ μ–΄λ ΅λ‹€.

2μ£Όλ™μ•ˆ λ°°μ› λ˜ κ°œλ…λ“€ 쀑 제일 μ–΄λ €μ› λ˜ 것 κ°™λ‹€. 맀일 ν•˜λŠ” λ§μ΄μ§€λ§Œ 볡슡.. κ·Έλ†ˆμ˜ 볡슡!😭 해도 해도 μ™œ 점점 ν•  양이 λŠ˜μ–΄λ‚˜λŠ”κ±ΈκΉŒ.. λ³΅μŠ΅ν•˜λ‹€λ³΄λ©΄ ν•΄μ•Όν•  것이 미뀄지고.. ν•΄μ•Όν•  것을 ν•˜λ©΄ λ³΅μŠ΅ν•˜λŠ” 것이 λŠ˜μ–΄λ‚˜κ³ γ… γ… 
μ•žμœΌλ‘œ ν‰μΌμ—λŠ” λ”± ν•  κ²ƒλ§Œ ν•˜κ³ (이것도 λ²…μ°Έ..) 주말에 λ³΅μŠ΅μ„ ν•΄μ•Όκ² λ‹€.πŸ˜‚

였늘 μ•Œκ³ λ¦¬μ¦˜ 문제둜 λ°±νŠΈλž˜ν‚Ή 문제 N-Queenκ³Ό DP 문제 단어퍼즐을 ν’€μ—ˆλ‹€. 사싀 ν‘Όκ²Œ μ•„λ‹ˆλΌ 닡을 ν•΄μ„ν–ˆλ‹€^^,, 이 λ¬Έμ œλΌλ„ λ‚΄ κ²ƒμœΌλ‘œ λ§Œλ“€κΈ° μœ„ν•΄.. λ¬Έμ œλ§ˆλ‹€ 3μ‹œκ°„ 이상은 μŸμ€ 것 같은데 집쀑을 μ œλŒ€λ‘œ λͺ»ν•œκ±΄μ§€ 풀이가 계속 λΉ™λΉ™ λ„λŠ” λŠλ‚Œμ΄μ—ˆλ‹€. κ²°κ΅­ 닡을 보고 λ§μ•„μ„œ 맀우 μ†μƒν–ˆλ‹€.πŸ˜‚

λ‚˜λŠ” 배우러 λ°λΈŒμ½”μŠ€λ₯Ό λ“€μ–΄μ™”μœΌλ‹ˆκΉŒ! λ‹€ ν•˜λ‚˜μ˜ 과정이겠지!
λͺ¨λ₯΄λŠ” 것을 μˆ¨κΈ°μ§€ 말자! λ‹€λ“€ 친절히 λŒ€λ‹΅ν•΄μ£Όμ‹€ν…Œλ‹ˆ μ§ˆλ¬Έν•˜μž!
λ‚˜λŒ€λ‘œ λ‚΄ νλ¦„λŒ€λ‘œ μž˜ν•˜κ³  μžˆμœΌλ‹ˆκΉŒ νž˜λ‚΄μž!

πŸ—£ 였늘의 TMI

λͺΈμ΄ μ’€ μ•ˆμ’‹μ•˜λ‹€. μ»¨λ””μ…˜ 쑰절! μ—„μ²­ μ€‘μš”ν•œ 뢀뢄이지 μ•Šμ„κΉŒ,,
제발 κ΅°κ²ƒμ§ˆλ‘œ λ°° μ’€ μ±„μš°μ§€λ§κ³ ^^.. λ°₯ μ’€ 잘 μ±™κ²¨λ¨ΉμžπŸš

μ€Œμ—μ„œλŠ” snap cameraκ°€ 잘만 λ˜λŠ”λ° μ™œ! λ””μŠ€μ½”λ“œμ—μ„œλ§Œ μ•ˆλ˜λŠλƒ” 말이야! λ‚˜λ„ ν•„ν„°γ… γ… 

Refer

JavaScript | FP && ES6+ | go, pipe, curry

였늘의 λ‚΄μš© 정리

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

profile
맀 μˆœκ°„ μ„±μž₯ν•˜λŠ” κ°œλ°œμžκ°€ 되렀고 λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

4개의 λŒ“κΈ€

comment-user-thumbnail
2022λ…„ 3μ›” 29일

λ³΅μŠ΅ν•˜λ‹€λ³΄λ©΄ ν•΄μ•Όν•  것이 미뀄지고.. ν•΄μ•Όν•  것을 ν•˜λ©΄ λ³΅μŠ΅ν•˜λŠ” 것이 λŠ˜μ–΄λ‚˜κ³ γ… γ…  <<< 눈물 μŸλŠ” 쀑... 😭😭😭

1개의 λ‹΅κΈ€
comment-user-thumbnail
2022λ…„ 3μ›” 29일

저도 λ””μŠ€μ½”λ“œ μŠ€λƒ…μΉ΄λ©”λΌ 맨날 λ˜λ‹€ μ•ˆλ˜λ‹€ ν•˜λ„€μš”... κ²Œλ‹€κ°€ λ λ•Œλ„ 자꾸 ꡬ석에 λ°•νžŒ κ°μžκ°€ λ˜λ²„λ¦¬λŠ”...γ…‹γ…‹γ… γ… 
μ–΄λ €μš΄ κ°œλ…μ΄λΌλ„ 배운 후에, λ‹€μ‹œ 보면 이미 μˆ˜κ²½λ‹˜μ˜ κ°œλ…μ΄ λ˜μ–΄ μžˆμ„ κ±°μ—μš”!! ν™”μ΄νŒ… μž…λ‹ˆλ‹€~

별건 μ•„λ‹ˆμ§€λ§Œ

였늘 μ•Œκ³ λ¦¬μ¦˜ 문제둜 λ°±νŠΈλž˜ν‚Ή 문제 N-Screenκ³Ό DP 문제 단어퍼즐을 ν’€μ—ˆλ‹€.

μ—¬κΈ° λ¬Έμ œμ΄λ¦„ μ˜€νƒ€ λ‚œ 것 κ°™μ•„μš”!

1개의 λ‹΅κΈ€