[ESLint] consistent-return

duoxiΒ·2024λ…„ 5μ›” 14일

ESLint

λͺ©λ‘ 보기
1/1

🚫 ERROR in [eslint]
Expected to return a value at the end of arrow function consistent-return

ESLint의 consistent-return λ¬Έμ„œλ₯Ό μ°Έκ³ ν–ˆμŠ΅λ‹ˆλ‹€!

πŸ“Œ consistent-return κ·œμΉ™μ΄λž€

consistent-return κ·œμΉ™μ€ return 값을 μΌκ΄€λ˜κ²Œ μœ μ§€ν•˜λ„λ‘ ν•˜λŠ” κ·œμΉ™μ΄λ‹€.
ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ°˜λ³΅λ¬Έμ΄λ‚˜ 쑰건문을 μ‚¬μš©ν•΄μ„œ return ν•˜λ €κ³  ν•˜λŠ” κ²½μš°μ— νŠΉμ • μ‘°κ±΄μ—μ„œλŠ” 값을 λ°˜ν™˜ν•˜μ§€ μ•Šμ•„μ„œ return 값이 μΌκ΄€λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

μ™œ λ°œμƒν•˜λŠ”μ§€?

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ•„λž˜μ™€ 같이 return 값을 λͺ…μ‹œμ μœΌλ‘œ ν•˜μ§€ μ•ŠμœΌλ©΄ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return; // undefinedλ₯Ό λ°˜ν™˜ν•¨
    }
}

μ΄λ ‡κ²Œ λ°˜ν™˜ νƒ€μž…μ„ μ •μ μœΌλ‘œ μ§€μ •ν•˜μ§€ μ•ŠλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ νŠΉμ„±μœΌλ‘œ μΈν•΄μ„œ λ‹€μ–‘ν•œ μœ ν˜•μ˜ 값을 λ°˜ν™˜ν•˜λ„λ‘ ν•˜λŠ” 점을 막기 μœ„ν•΄μ„œ consistent-return κ·œμΉ™μ„ μ‚¬μš©ν•œλ‹€.

μ–Έμ œ λ°œμƒν•˜λŠ”μ§€?

νŠΉμ • 쑰건일 λ•Œμ—λŠ” 값을 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ—λŠ” undefinedλ₯Ό λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— κ·œμΉ™μ„ μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” μ½”λ“œμ΄λ‹€.

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}
function doSomethingElse(condition) {
    if (condition) {
        return true;
    }
}

κ·œμΉ™μ„ μ€€μˆ˜ν•˜λ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return false;
    }
}

🀨 μ œκ°€ λ§ˆμ£Όν•œ 상황은

λΆλˆ…μ—μ„œ λ§€κ°œλ³€μˆ˜μ— null 값이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜λ €κ³  ν–ˆλ‹€.

const hasNull = (...args: (string | number | null)[]): boolean => {
  args.forEach((arg) => {
    if (arg === null) {
      return true
    }
  })

  return false
}

μœ„μ²˜λŸΌ argκ°€ null일 λ•ŒλŠ” trueλ₯Ό λ°˜ν™˜ν•˜κ³  argsλ₯Ό λͺ¨λ‘ ν™•μΈν•œ ν›„μ—λŠ” falseλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μž‘μ„±ν–ˆλ‹€.
그런데 쑰건문 if의 else인 κ²½μš°μ— λŒ€ν•΄μ„œλŠ” return 문이 μ—†κΈ° λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλƒλ©΄μš”

μ΄λŸ°μ €λŸ° μ‹œλ„λ₯Ό ν•˜λ‹€κ°€ μƒκ°λ‚œ 게 some λ©”μ†Œλ“œμ΄λ‹€!
λ°°μ—΄μ˜ μš”μ†Œκ°€ νŠΉμ • 쑰건에 λ§Œμ‘±ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό 확인할 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œμ΄κΈ° λ•Œλ¬Έμ— λ”± μ μ ˆν•œ λ©”μ†Œλ“œμ˜€λ‹€.
κ·Έλž˜μ„œ μ½”λ“œλ₯Ό μ•„λž˜μ²˜λŸΌ μˆ˜μ •ν–ˆλ‹€.

const hasNull = (...args: (string | number | null)[]): boolean => {
  return args.some((arg) => arg === null)
}

πŸ“’ 마무리

java둜 μ½”ν…Œ ν’€λ•Œ μœ„μ²˜λŸΌ 쑰건문을 μ‚¬μš©ν•΄μ„œ return ν•˜λŠ” 방식을 자주 μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆμ—ˆλŠ”λ°, μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ½”λ“œλ₯Ό μ§€ λ•ŒλŠ” 자슀의 νŠΉμ„±μ— λ§žμΆ°μ„œ consistent-return κ·œμΉ™μ„ 잘 μ€€μˆ˜ν•˜λŠ” 게 μ½”λ“œ ν’ˆμ§ˆμ— 더 쒋을 λ“―ν•˜λ‹€!

그리고 맀번 μ“°λŠ” λ©”μ†Œλ“œ(foreach, map)만 μ“°λ‹€λ³΄λ‹ˆ some, filter μ‚¬μš©μ„ 까먹게 λœλ‹€. 자슀 곡뢀λ₯Ό μ†Œν™€νžˆ ν•˜μ§€ 말자!πŸ‘

profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ—°μŠ΅μƒ

0개의 λŒ“κΈ€