반응형
Boolean 변수명을 지을때 우리는 항상 'is' 혹은 'has' 같은 prefix를 사용한다.
예를들면, isAvailable, hasAccess, isEntered 등등
하지만 정말 애매한 boolean 변수명을 작명해야 할 때가 있다.
Boolean that verifies that every case is true
boolean XXX = users.every(user => user.isActive)
이런 코드가 있고, 이때 boolean은 모든 유저가 active인지에 대해 판별하는 변수명을 작명하고자 한다.
이때 당신이라면 어떤 변수명을 지을 것이고 어떤게 좋은지 생각해보자.
Variable | Any good? | Reason |
isUsersLoggedIn | 🤢 | 문법적으로 비적합하다. |
areUsersLoggedIn | 🤬 |
커스텀된 prefix이다. |
isEveryUserLoggedIn | 👍 | Array.prototype.every에 부합한다. |
isEachUserLoggedIn | 🥰 | "every" 라는 용어보다 더 자연스럽다. |
Boolean that verifies that one of many cases is true
const XXX = users.some(user => user.isActive)
어떤 유저가 active인지 판별하는 변수명은 어떻게 작성해볼까?
Variable | Any good? | Reason |
isUsersActive | 😱 | 문법이 부적합하고 모호하다. |
isAtLeastOneUserActive | 😵 | 너무 단어가 길다. |
isOneUserActive | 🤥 |
의도와 다르다. 이런 혼란스러운 변수명은 피하자. |
isSomeUserActive | 👍 | Array.prototype.some에 부합한다. |
isAnyUserActive | 🤗 | "some"이라는 용어보다 더 자연스럽다. |
Avoid custom prefixes
앞서 몇몇 내용들을 보았지만 커스텀 prefix를 피해야 하는 예시를 또 보자.
Variable | Any good? | Reason |
wasPaidFor | 🤢 | 커스텀 prefix |
paidFor | 😣 | prefix가 없다. |
areBillsPaidFor | 😧 | 커스텀 prefix |
hadHaveHadBeenPaidFor | 😶 | 단어도 너무 길고 그냥 말도안된다. |
isPaidFor | 😊 | 적합하다. |
Affirmative names
Variable | Any good? | Reason |
isDisabled | 🤢 | 네거티브한 변수명이다. |
isNotActive | 🤮 | !isNotActive 이런 코드만봐도 답이없다. |
hasNoBillingAddress | 😞 | "no"라는 것은 변수명에 필요없다. |
isEnabled / isActive / hasBillingAddress | 😁 | positive한 변수명을 이용함으로써 !isActive같은 것들도 자연스러워진다. |
네거티브한 boolean 변수명을 왜 지양하는지 아래 코드를 보면 조금 더 와닿을 수 있다.
if (!account.isDisabled) {
// ...
}
positive한 boolean이 얼마나 잘 와닿는지 보자.
if (account.isEnabled) {
// ...
}
비교적 다들 아는 내용일지 모르지만, boolean 변수명을 지을 때 항상 시간을 많이 허비하는 것 같다.
그럴수록 더 기본적인 작명 방법에 대해 생각해보는 시간을 가지는 것도 좋을 것 같다.
https://dev.to/michi/tips-on-naming-boolean-variables-cleaner-code-35ig
반응형
'Programing Etc. > Coding Tip' 카테고리의 다른 글
VS Code에서 폴더 구조를 트리 형태로 표시하는 방법 (0) | 2023.02.18 |
---|---|
리팩토링 원칙 (0) | 2018.11.27 |
TDD(Test-Driven Development)란? (0) | 2018.11.22 |
Error C4996 해결법 (1) | 2016.03.25 |
추가적인 참고사항 (0) | 2015.03.08 |