스위치 스테이트먼트에서 복귀하는 것이 브레이크 사용보다 더 좋은 방법이라고 생각하십니까?
1 - 옵 1 -switch
를 사용합니다.return
:
function myFunction(opt) {
switch (opt) {
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
2 - 옵 22 -switch
를 사용합니다.break
:
function myFunction(opt) {
let retVal = "";
switch (opt) {
case 1:
retVal = "One";
break;
case 2:
retVal = "Two";
break;
case 3:
retVal = "Three";
break;
}
return retVal;
}
둘 다 효과가 있다는 건 알지만, 또 하나의 베스트 프랙티스가 있을까요?는 1번 - 1번 편이에요.switch
를 사용합니다.return
이치노
다음은 @ic3b3rg의 코멘트에서 언급된 기술을 사용한 구체적인 예시의 jsFiddle입니다.
let SFAIC = {};
SFAIC.common = {
masterPages: {
cs: "CS_",
cp: "CP_"
},
contentPages: {
cs: "CSContent_",
cp: "CPContent_"
}
};
function getElementPrefix(page) {
return (page in SFAIC.common.masterPages)
? SFAIC.common.masterPages[page]
: (page in SFAIC.common.contentPages)
? SFAIC.common.contentPages[page]
: undefined;
}
함수를 호출하려면 다음과 같은 방법으로 호출합니다.
getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);
여기서 문제는 항상 정의되지 않은 상태로 반환된다는 것입니다.내 생각에 그건 물체의 실제 값을 전달하기 때문이지 속성이 아닌 것 같아.@ic3b3rg의 코멘트에 기재된 기술을 사용하여 이 문제를 해결하려면 어떻게 해야 합니까?
중단하면 함수에서 처리를 계속할 수 있습니다.스위치에서 복귀하는 것만으로 기능하고 싶은 경우는 괜찮습니다.
둘 다 매우 간단한 일치고는 꽤 장황하기 때문이다.다음 작업을 수행할 수 있습니다.
const result = ({
1: 'One',
2: 'Two',
3: 'Three'
})[opt] ?? 'Default' // opt can be 1, 2, 3 or anything (default)
물론 이것은 문자열과 함께 동작합니다.둘 다 조합하거나 기본 대소문자를 사용하지 않습니다.
const result = ({
'first': 'One',
'second': 'Two',
3: 'Three'
})[opt] // opt can be 'first', 'second' or 3
설명:
이 기능은 옵션/케이스가 키이고 결과가 값인 개체를 만드는 방식으로 작동합니다.옵션을 괄호로 묶으면 괄호 표기를 통해 식과 일치하는 키 값에 액세스할 수 있습니다.
값은 반환됩니다.undefined
괄호 안의 표현이 유효한 키가 아닌 경우.이 정의되지 않은 대소문자는 nullish mergeing 연산자를 사용하여 검출하고 기본값을 반환할 수 있습니다.
예:
console.log('Using a valid case:', ({
1: 'One',
2: 'Two',
3: 'Three'
})[1] ?? 'Default')
console.log('Using an invalid case/defaulting:', ({
1: 'One',
2: 'Two',
3: 'Three'
})[7] ?? 'Default')
.as-console-wrapper {max-height: 100% !important;top: 0;}
기능에 따라서는 switch 스테이트먼트만으로 구성된다면 괜찮다고 생각합니다.그러나 해당 기능 내에서 다른 작업을 수행하는 경우에는 권장하지 않습니다.또, 장래가 아니라, 현재의 요건을 고려해야 할 수도 있습니다.옵션 1에서 옵션 2로 기능을 변경하려면 리팩터링이 더 필요합니다.
단, if/else 문장은 다음 작업을 수행하는 것이 좋습니다.
var foo = "bar";
if(foo == "bar") {
return 0;
}
else {
return 100;
}
이를 바탕으로 옵션1이 더 나은 실천이라고 주장할 수 있다.
즉, 명확한 답이 없기 때문에 코드가 일관되고 읽기 쉬우며 유지보수가 가능한 표준을 준수하고 있는 한, 즉 애플리케이션 전체에서 옵션1과 옵션2를 혼재시키지 않는 것이 최선의 방법입니다.
언급URL : https://stackoverflow.com/questions/6114210/is-returning-out-of-a-switch-statement-considered-a-better-practice-than-using-b
'programing' 카테고리의 다른 글
python 예외 메시지 캡처 (0) | 2022.09.28 |
---|---|
Python json.loads에 ValueError: 추가 데이터가 표시됩니다. (0) | 2022.09.28 |
Java의 ToLowerCase() 및 ToUpperCase()에서 Locales 사용 (0) | 2022.09.28 |
오류: 요청 엔티티가 너무 큽니다. (0) | 2022.09.28 |
mysql 명령어가 mysql 대신 mariaDB를 시작합니다. (0) | 2022.09.28 |