else if 피하기
const NUMBER = 5;
if(NUMBER >= 0){
console.log("0보다 크거나 같다.") // "0보다 크거나 같다."
} else if( NUMBER > 0){
consoel.log("0보다 크다.")
}
- 콘솔창엔 "0보다 크거나 같다." 이 출력된다.
- 왜냐하면 else if는 else 한 후 다시 if 조건문을 만들기 때문이다.
const NUMBER = 5; if(NUMBER >= 0){ console.log("0보다 크거나 같다.") } else { if( NUMBER > 0){ consoel.log("0보다 크다.") } }
- else if문은 사실 위 코드처럼 실행되고 있다.
- 그래서 NUMBER는 0보다 크거나 같기도 하고 0보다 크기도 하므로 두 가지 조건을 통과해야한다.해결
- 조건이 많아질땐 차라리 swich case로 하는 것이 더 낫다.
else 피하기
- 항상 else문을 쓸 필요는 없다. 의식적으로 판단할 것.
// 20세 미만인 사람에겐 reprot함수가 발생하고 모든 유저들에게 인사를 하는 함수.
function getHelloCustomer(user) {
if(user.age < 20) {
report(user);
} else {
return '안녕하세요.';
}
}
- 위 코드의 문제점은?
- 20세 미만인 유저가 들어올때 report함수를 발생하지만 인사를 하지 않는다.
- 해결 코드
function getHelloCustomer(user) {
if(user.age < 20>) {
report(user);
} return '안녕하세요.';
}
-
Early Return
- 하나의 if문에 의존성이 많을때 사용
예제1
- 로그인 여부
- 토큰 존재
- 기가입자 확인
3-1. 가입
3-2. 로그인 성공
function loginService(isLogin, user) {
if(!isLogin) {
if(checkToken()) {
if(!user.nickName) {
return registerUser(user);
} else {
refrechToken();
return '로그인 성공';
}
} else {
throw new Error('NO Token');
}
}
}
early return으로 예제코드1 정리
function login(){
refrechToken();
return '로그인 성공';
}
function loginService(isLogin, user) {
// Early Return
/**
* 함수를 미리 종료
* 사고하기 편하다.
*/
if (isLogin) { // 이미 로그인 한 사람들 로직에서 뺀다.
return
}
if (!checkToken()){
return new Error("NO Token");
}
if(!user.nickName) {
return registerUser(user);
}
login(); // 어느 부분이 실행되는지 명확하게 알 수 있다.
}
예제코드2
function 오늘하루(condition, weather, isJob) {
if (condition === 'GOOD') {
공부();
게임();
유튜브보기();
if (weather === 'GOOD'){
운동();
빨래();
}
if (isJob === 'GOOD'){
야간업무();
조기취침();
}
}
}
- condition이 GOOD일때만 동작하는 코드
early return 예제코드2 정리
function 오늘하루(condition, weather, isJob) {
if (condition !== 'GOOD') { // 최상위에 거르는 조건을 넣는다.
return
}
공부();
게임();
유튜브보기();
if (weather === 'GOOD'){
운동();
빨래();
}
if (isJob === 'GOOD'){
야간업무();
조기취침();
}
}
부정 조건문 지양하기
- 생각을 여러번 해야하기 때문에
- 프로그래밍 언어 자체로 if문이 처음부터오고 true부터 실행시킨다.
- 부정 조건 예외
- Early Return
- Form validation
- 보안 혹은 검사하는 로직
// 숫자일때만 if (isNaN(3)) { console.log('숫자입니다.') } if (!isNaN(3)) { console.log('숫자입니다.') //숫자입니다. }
- isNaN이 반대의 결과가 나오기 때문에 많이 헷갈린다.
function isNumber(num) { return !NUMBer.isNaN(num) && typeOf num === 'number' } if (isNumber(3)) { consolel.log('숫자입니다.'); //숫자입니다. }
Default Case 고려하기
- 사용자에게 값을 얻지 못했을때 기본값을 설정하여 어떠한 정책을 고려한다
- .더욱 더 안전하게 개발하기 위한다.
- '엣지 케이스'라고도 불림
function sum(x,y){
x = x || 1 // 기본값을 설정
y = y || 1
return x + y
}
console.log(sum())
이 글은 https://www.udemy.com/course/clean-code-js 클린코드 강의를 보고 작성한 글입니다.
'개발언어 > javascript' 카테고리의 다른 글
변수명 이름 표기법 (0) | 2023.01.02 |
---|---|
[CleanCode] 삼항연산자를 어떻게 다룰까? (0) | 2022.12.10 |
이중 for문 흐름 이해하기 (0) | 2022.12.10 |
데이터 타입 검사 ( 원시타입과 객체타입에 따른) (0) | 2022.12.07 |
댓글