코드리뷰에서 elseIf보다는 Early Return을 사용하는 것이 나을 것 같다는 리뷰를 받았다.
early return 에 대해 알기는 하지만 정확히 언제 쓰이는지, 장단점이 뭔지에 대해 잘 모르는 것 같아서 기록해본다.
Early Return은 조건과 맞지 않는 결과를 일찍 반환하는 것.
그래서 if/else 대신 if/return 을 사용한다.
장점
5자 이상의 숫자를 입력받는 input 이 있다.
5자 이하의 숫자를 입력하고 버튼을 누르면 5자 이상 입력하라는 오류메세지가 나오고,
5자 이상이지만 숫자가 아닌 값을 입력하면 숫자를 입력하라는 오류메세지가 나온다.
if/else 형태로 작성한 코드는 이러하다
const isNumber = (v: string) => /^(\s|\d)+$/.test(v);
const getInput = () => {
if (inputValue.length > 4) {
if (isNumber(inputValue)) {
setArr((prev) => [...prev, inputValue]);
setInputValue("");
} else {
setError("숫자를 입력해 주세요");
}
} else {
setError("5자 이상 입력해 주세요");
}
};
엄청나게 깊은 중첩은 아니지만 보기에 가독성이 떨어진다
early return 을 사용해서 수정해보면
const getInput = () => {
//숫자가 아닐때 에러메세지
if (!isNumber(inputValue)) {
setError("숫자를 입력해 주세요");
return;
}
//5자 이하일 때 에러메세지
if (inputValue.length < 4) {
setError("5자 이상 입력해 주세요");
return;
}
//위의 if문이 다 아니라면 이게 실행
setArr((prev) => [...prev, inputValue]);
setInputValue("");
};
이렇게 작성했을 때가 확실히 읽히는것도 자연스럽고 의미도 명확해 보인다.
if 조건문에 들어오면 해당 동작을 하고 return 해버리고 더 이상의 동작은 하지 않기 때문에 , 이 함수가 어떤 조건일 때 무엇을 반환하는지 명확해 보인다..!
아래 블로그에 설명이 매우 잘 나와있어서 참고하면 좋을 듯 !
https://medium.com/swlh/return-early-pattern-3d18a41bba8