programing

스위치 스테이트먼트에서 복귀하는 것이 브레이크 사용보다 더 좋은 방법이라고 생각하십니까?

nicescript 2022. 9. 28. 22:11
반응형

스위치 스테이트먼트에서 복귀하는 것이 브레이크 사용보다 더 좋은 방법이라고 생각하십니까?

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

반응형