2012-01-26 3 views
1

안녕하세요, 저는 올바른 구문이 Flash AS3의 Case 문을보다 잘 구성하는 방법을 찾고자합니다. 예를 들어 3 개의 사례 진술 대신에 아래에 나와있는 것처럼, 어떻게 든 1로만 구성 할 수 있습니까? AS3 사례 문장을 한 줄로 구성하는 방법은 무엇입니까?

switch (refID) 
{ 
    case "TS_38": 
     pgBool = true; 
     break; 
    case "TS_37": 
     pgBool = true; 
     break; 
    case "TS_36": 
     pgBool = true; 
     break; 
    default: 
     pgBool = false; 
     //break; 
} 

나는이 시도하지만 내 테스트에서 작동하지 않았다

switch (refID) 
{ 
    case "TS_38": 
    case "TS_21": 
    case "TS_21": 
     pgBool = true; 
     break; 
    default: 
     pgBool = false; 
     //break; 
} 

답변

6

이 시도 :

switch (refID) 
{ 
    case "TS_38", "TS_37", "TS_36": 
     pgBool = true; 
     break; 
    default: 
     pgBool = false; 
     //break; 
} 
+0

달콤한 감사합니다! 빠른 답변 : D –

+0

환영합니다 :) 왜 똑같은 두 가지 사례가 있습니까? –

+0

오, 그건 우연히 hehe에요, 나는 거기에 30처럼 있었고 빠르게 그들을 제거했다 ... –

1

당신이 할 수있는

switch (refID) 
{ 
case "TS_38": 
case "TS_21": 
case "TS_21": 
    pgBool = true; 
    break; 

default: 
    pgBool = false; 
    //break; 

을}

1

switch 대신 if 문을 사용할 수도 있습니다. & & 및 || 운영자 :

if (refID == "TS_38" || refID == "TS_21" || refID == "TS_21") { 
    pgBool = true; 
} else { 
    pgBool = false; 
} 

두 가지 사례가 동일합니다.

1

이 예제에서는 스위치 케이스를 사용하지 마십시오. 스위치 케이스는 코드를 작성하는 가장 짧은 방법은 아니며, 종종 중복 코드를 작성하라는 메시지를 표시합니다 (예 : "나쁜 코드의 좋은 예").

코드는 다음처럼 기록 된 적이 있었다 대상 :

pgBool = ["TS_38", "TS_21"].indexOf(refID) > -1; 

또는

pgBool = refID in {"TS_38" : "", "TS_21" : ""}; 

(이 기능이 될 경우 가장 확실하게 당신은 배열/객체를 재사용하고 싶습니다 한 번 이상 전화했다).


나는이 답변을 몇 번이나 다운 받았다고 생각 했으므로 자세한 설명이 필요하다고 생각합니다.

우선, 해시 테이블을 사용하는 것이 스위치 케이스보다 나은 이유는 무엇입니까?

  1. 확장 가능합니다. 결정을 내려야하는 함수 외부에 해시 테이블을 저장하면 결정을 내리는 함수를 변경할 필요가 없으며 테이블에서 키를 추가하거나 제거 할 수 있습니다. 더 유연하고 읽기 쉽도록 해줍니다 암호. 그것은 또한 런타임 변경을 허용하며, 스위치 케이스에서는 불가능합니다.

  2. 해시 테이블은 키를 해시하므로 테이블에 저장된 값의 액세스 시간이 일정하고 (대개 매우 작음) 보장됩니다. 동시에 AS3에서 인코딩 된 switch-case는 if-else 절의 간단한 체인으로, 스위치 케이스가 길수록 함수가 각 조건을 확인하는 데 더 많은 시간이 소요됩니다. switch-case를 사용하면 조건을 테스트하는 순서를 특정 제어 할 수 있지만 사전에 트리거를 더 자주 트리거 할 수는 없습니다. 해시 테이블은 모든 조건을 동일하게 취급합니다.

은 실제로, 해시 테이블을하는 스위치 케이스를 선호하는 이유는 결코이 있다는 것을 의미한다.특히 Python과 같은 일부 언어는 동일한 이유로 이러한 구조를 가지고 있지 않습니다.

+0

오 멋지다! 그렇다면 기본적으로 Bool이 일치하는지 확인한 다음 0 = 1 또는 1입니다. –

+0

재미있는 소리, 나는 결코이 기술을 사용하지 못했습니다. 나는 미래에 시도 할 것이지만, 내가 아는 한 indexOf 배열의 메소드는 아주 느리다. –

1

는 건너 수있는 다른 어떤 경우 몰라하지만, 예를 들어 당신은 당신이 완전히 스위치 문을 제거 할 수 있습니다 주었다 작동

if(refId.split("_")[0] == "TS"){ 
    pgBool = true; 
} 
else{ 
    pgBool = false; 
} 
+0

고마워! 나는 완전히 다른 것을 위해 이것을 사용할 수 있지만,이 프로젝트를 위해 모든 ID는 TS로 시작한다. ( –