Pure Functions In Javascript - Lee-hyuna/33-js-concepts-kr GitHub Wiki

Pure Functions In Javascript

λ²ˆμ—­ : https://appdividend.com/2017/04/10/pure-functions-in-javascript/

Javascript의 순수 ν•¨μˆ˜λŠ” 호좜 μ‹œκ°„μ— 전달 된 맀개 λ³€μˆ˜λ‘œ λ°˜ν™˜ 값이 κ²°μ •λ˜λŠ” μΌμ’…μ˜ ν•¨μˆ˜μž…λ‹ˆλ‹€.

JavascriptλŠ” μˆœμ „νžˆ κΈ°λŠ₯적인 μ–Έμ–΄κ°€ μ•„λ‹™λ‹ˆλ‹€. ν•¨μˆ˜λ₯Ό 객체 (first-class function)둜 μ·¨κΈ‰ν•©λ‹ˆλ‹€.

ν•¨μˆ˜μ— μž…λ ₯ 맀개 λ³€μˆ˜ 값을 μ œκ³΅ν•˜κ³  항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ©΄ μžλ°” 슀크립트의 순수 ν•¨μˆ˜ κ°€λ©λ‹ˆλ‹€.

Pure Functions

순수 ν•¨μˆ˜ ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ€μ΄ 두 μ—„κ²©ν•œ ν•¨μˆ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ νŒŒμƒλ©λ‹ˆλ‹€.

  1. Clojure
  2. Scala

순수 ν•¨μˆ˜ νŠΉμ • Ajax 호좜 λ˜λŠ” λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€ 호좜 μ—λ§Œ μ˜μ‘΄ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹¨μˆœνžˆ 맀개 λ³€μˆ˜λ₯Ό μ·¨ν•˜κ³  ν•¨μˆ˜ λ³Έλ¬Έμ—μ„œ 일뢀 계산을 μˆ˜ν–‰ν•˜κ³  이λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

μΈμˆ˜μ— 따라 μ „μ μœΌλ‘œ ν•¨μˆ˜ ν˜ΈμΆœμ— μ „λ‹¬ν•©λ‹ˆλ‹€ .

Pure Functions In Javascript

μž…λ ₯ 값을 좜λ ₯ 값에 λ§€ν•‘ν•©λ‹ˆλ‹€.

이 ν”„λ‘œκ·Έλž˜λ° μŠ€νƒ€μΌμ„ ν”„λ‘œ μ‹œμ € ν”„λ‘œκ·Έλž˜λ° 이라고 λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν•΄λ‹Ή ν•¨μˆ˜μ— λŒ€ν•œ μž…λ ₯에 λŒ€ν•΄ μˆ˜ν–‰λ˜λŠ” 일련의 연산이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

ν•¨μˆ˜λŠ” ν•΄λ‹Ή ν•¨μˆ˜λ‘œ μ „λ‹¬λ˜λŠ” λ³€μˆ˜μ—λ§Œ 맀개 λ³€μˆ˜λ‘œ μ•‘μ„ΈμŠ€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

μ „μ—­ λ³€μˆ˜ λ˜λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” 순수 ν•¨μˆ˜ λ‚΄μ—μ„œ 합법적 인 λ³€μˆ˜λ‘œ κ°„μ£Όλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ³€μˆ˜μ˜ μ „μ—­ λ²”μœ„λŠ” 순수 ν•¨μˆ˜μ˜ 생성에 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μˆ˜ν•™ ν•¨μˆ˜λ‘œ μž‘λ™ν•˜λŠ” λͺ…λ Ή μ§‘ν•©μž…λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” μ—­ν•  기반 ν•¨μˆ˜λ‘œ 인수λ₯Ό μ·¨ν•˜κ³  ν•΄λ‹Ή λ³€μˆ˜μ— λŒ€ν•œ 연산을 μˆ˜ν–‰ ν•œ λ‹€μŒ λ°˜ν™˜ν•©λ‹ˆλ‹€.

Advantages:

  1. 주어진 ν•¨μˆ˜μ˜ κ²°κ³Όλ₯Ό 항상 μ˜ˆμΈ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. ν…ŒμŠ€νŠΈλŠ” 항상 μ–΄νœ˜ λ²”μœ„ λ°–μ—μžˆλŠ” λ³€μˆ˜μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‰½μŠ΅λ‹ˆλ‹€.
  3. κΈ°λŠ₯적 ν”„λ‘œκ·Έλž˜λ°μ€ μ½”λ“œ 라인을 쀄이고 거의 루프λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.

Examples:

//main.js  
let pure = (y) => { 
	let x = 10; 
	x = x + y; 
	return x; 
}; 

let y = pure(3); 
console.log(y); // 13  
let z = pure(3); 
console.log(z); // 13

** λΈŒλΌμš°μ €μ—μ„œ 직접 μœ„μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. **

Possible Errors

  1. You can get any syntax error.
  2. If you perform code directly in your browser, then chances are very high to fail the webpack compilation process.

Possible Solutions

  1. **Beginner’s Guide To Setup ES6 Development Environment이 λ¬Έμ„œλ₯Ό μ—„κ²©νžˆ μ€€μˆ˜ν•˜κ³  main.js νŒŒμΌμ— μ½”λ“œλ₯Ό μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.

μœ„μ˜ μ˜ˆμ—μ„œ ν•¨μˆ˜μ˜ 호좜 μ‹œκ°„μ— 맀번 맀개 λ³€μˆ˜λ₯Ό 3으둜 μ „λ‹¬ν•˜λ©΄ 항상 λͺ¨λ“  μƒν™©μ—μ„œ 13을 λ°˜ν™˜ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μˆœμˆ˜ν•œ μžλ°” 슀크립트 κΈ°λŠ₯μž…λ‹ˆλ‹€.

μžλ°” μŠ€ν¬λ¦½νŠΈμ—μ„œ 숫자, λ¬Έμžμ—΄ 및 λΆ€μšΈκ³Ό 같은 κ°„λ‹¨ν•œ λ³€μˆ˜λŠ” λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 객체 및 λ°°μ—΄κ³Ό 같은 데이터 κ΅¬μ‘°λŠ” 데이터 λͺ¨μŒμ΄λ―€λ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

//main.js

const numbers = [1, 2, 3];
numbers.forEach(x => console.log(x)); //1 2 3

Arrays and Objects λŠ” non-primitive 데이터 μœ ν˜•μ΄λ―€λ‘œ λ³€ν˜• 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œλŠ” ν•˜λ‚˜μ˜ λ°°μ—΄μ—μžˆλŠ” μ›μ†Œμ˜ 값을 ν•˜λ‚˜μ”© 좜λ ₯ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μˆœμˆ˜ν•œ μžλ°” 슀크립트 ν•¨μˆ˜μž…λ‹ˆλ‹€.

Example #1

//main.js

let arr = [1, 2, 3, 4, 5, 6];

even = arr.filter(function (element) {
    return element%2 === 0;
});
console.log(even); //[2,4,6]

λ°°μ—΄μ˜ 이전 μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄ 순수 ν•¨μˆ˜λΌκ³ λ„ν•©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ—μ„œ Filter ν•¨μˆ˜λŠ” 쑰건을 κ²€μ‚¬ν•˜κ³  만쑱 μŠ€λŸ¬μš΄μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. μƒˆ λ°°μ—΄ 집합을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

Example #2

//main.js

let dances = [
    {name: 'Krunal', type: 'Robot'},
    {name: 'Ankit', type: 'Salsa'},
    {name: 'Tom', type: 'Garba'},
    {name: 'Jerry', type: 'Belly'}
];
let collection = dances.filter((dance)=>{
   return  dance.type === 'Robot'
});
console.log(collection); // [object]