πŸ“•[μ±…] 쏙쏙 λ“€μ–΄μ˜€λŠ” ν•¨μˆ˜ν˜• μ½”λ”© - 25,26

rivolt0421Β·2023λ…„ 4μ›” 18일
0

πŸ“•μ±…

λͺ©λ‘ 보기
15/26

279p ~ 302p

μš”μ•½

πŸ˜‡ κ°œμš”
ν•¨μˆ˜ 본문을 콜백으둜 λ°”κΎΈκΈ° -> κ²°κ΅­, κ³ μ°¨ν•¨μˆ˜λ₯Ό ν™œμš©ν•œ λ¦¬νŒ©ν† λ§κ³Ό 같은 말.
1. with νŒ¨ν„΄
2. wrap νŒ¨ν„΄

// 예) saveUserData() ν•¨μˆ˜ μ‹€ν–‰ μ—λŸ¬ μ‹œ 둜그λ₯Ό 남기고 μ‹ΆμŒ
// μ›λž˜ μ½”λ“œ
try {
  saveUserData(user);
} catch (error) {
  logToSnapErrors(error);
}

// withLogging
function withLogging(f) {
  try {
    f();
  } catch(error) {
    logToSnapErrors(error);
  }
}
withLogging(function() {
  saveUserData(user);
});

// wrapLogging
function wrapLogging(f) {
  return function (arg) {
    try {
      f(arg);
    } catch {
      logToSnapErrors(error);
    }
  }
}
var saveUserDataWithLogging = wrapLogging(saveUserDataNoLogging);

with νŒ¨ν„΄μ˜ 단점 : λͺ¨λ“  μ½”λ“œμ— μˆ˜λ™μœΌλ‘œ withLogging() ν•¨μˆ˜λ₯Ό μ μš©ν•΄μ•Ό 함. μ–΄λ–€ 뢀뢄은 까먹고 적용 μ•ˆν•  수 도 있음.
wrap νŒ¨ν„΄μ€ ν•¨μˆ˜ νŒ©ν† λ¦¬(factory) λ₯Ό μ‚¬μš©ν•œ 것. ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λŠ” ν•¨μˆ˜ νŒ©ν† λ¦¬.

πŸ˜‡ κ³ μ°¨ ν•¨μˆ˜ 정리

  • κ³ μ°¨ ν•¨μˆ˜λ‘œ νŒ¨ν„΄μ΄λ‚˜ 원칙을 μ½”λ“œλ‘œ λ§Œλ“€ 수 μžˆλ‹€. ν•œ 번 μ •μ˜ν•˜κ³  ν•„μš”ν•œ 곳에 μ—¬λŸ¬λ²ˆ μ‚¬μš©. μˆ˜μž‘μ—…μ„ μ€„μž„.
  • κ³ μ°¨ ν•¨μˆ˜λ‘œ "ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜"λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
  • νŠΈλ ˆμ΄λ“œ μ˜€ν”„κ°€ μžˆλ‹€. κ³ μ°¨ ν•¨μˆ˜λŠ” λ§Žμ€ 쀑볡 μ½”λ“œλ₯Ό μ—†μ• μ£Όμ§€λ§Œ 가독성을 λ–¨μ–΄λœ¨λ¦°λ‹€.

πŸ˜‡ ν•¨μˆ˜ν˜• 반볡

  1. map
    • μ–΄λ–€ κ°’(x)의 집합이 μžˆλŠ” 배열을 또 λ‹€λ₯Έ κ°’(y)의 μ§‘ν•©μœΌλ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜.
    • xλ₯Ό y둜 λ°”κΎΈλŠ” 계산을 ν•˜λŠ” ν•¨μˆ˜λ₯Ό 인자둜 λ°›λŠ”λ‹€.
// 원본 ν•¨μˆ˜
function emailsForCustomers(customers, goods, bests) {
  var emails = [];
  forEach(customers, function(customer) {
    var email = emailForCustomer(customer, goods, bests);
    emails.push(email);
  });
  return emails;   
}

// map ν™œμš©
function emailsForCustomers(customers, goods, bests) {
  return map(customers, function(customer) {
    return emailForCustomer(customer, goods, bests);
  });
}
  1. filter
    • λ°°μ—΄μ—μ„œ 일뢀 ν•­λͺ©μ„ μ„ νƒν•˜λŠ” ν•¨μˆ˜.
    • μ›μ†Œ xλ₯Ό λ°›μ•„ boolean νƒ€μž…μ„ λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜(predicate)λ₯Ό 인자둜 λ°›λŠ”λ‹€.
// 원본 ν•¨μˆ˜
function selectBestCustomers(customers) {
  var newArray = [];
  forEach(customers, function(customer) {
    if (customer.purchases.length >= 3)
      newArray.push(customer);
  });
  return newArray;   
}

// filter ν™œμš©
function selectBestCustomers(customers) {
  return filter(customers, function(customer) {
    return customer.purchases.length >= 3;
  });
}

발췌

ν•¨μˆ˜λ₯Ό λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜λŠ” ν•¨μˆ˜ νŒ©ν† λ¦¬ factory 와 κ°™μŠ΅λ‹ˆλ‹€.
μžλ™μœΌλ‘œ μ •ν˜•ν™”λœ μ½”λ“œλ₯Ό ν•¨μˆ˜λ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ 곡μž₯.

λ§Žμ€ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” κ³Όλ„ν•˜κ²Œ λͺ°λ‘ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.
... (μ€‘λž΅) ...
κ³ μ°¨ ν•¨μˆ˜λ‘œ λ§Œλ“  쒋은 방법을 μ°Ύμ•˜λ‹€λ©΄, 직관적인 방법과 항상 비ꡐ해 λ³΄μ„Έμš”. μ–΄λ–€ 방법이 더 μ’‹μ„κΉŒμš”?

  • μ½”λ“œκ°€ 더 읽기 μ‰¬μš΄κ°€μš”?
  • μ–Όλ§ˆλ‚˜ λ§Žμ€ 쀑볡 μ½”λ“œλ₯Ό 없앨 수 μžˆλ‚˜μš”?
  • μ½”λ“œκ°€ ν•˜λŠ” 일이 무엇인지 μ‰½κ²Œ μ•Œ 수 μžˆλ‚˜μš”?

이런 μ§ˆλ¬Έλ“€μ„ λ†“μΉ˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€.

κ³Όλͺ°μž… 주의. 항상 μ‹€μ „μ£Όμ˜, μ‹€μš©μ£Όμ˜.

λ©”λͺ¨

profile
I think I think too much.

0개의 λŒ“κΈ€