2011-01-07 6 views
1

returnelse 문을 CFScript에서 상호 교환하여 사용하는 것에 대한 의견을 듣고 싶습니다. 그것은 최근에 나에게 발생CFScript에서 return 문을 교환 할 수 있습니까?

if (something) { 
    // Do something 
} 
else { 
    // Do something else 
} 

내가 대신이 작업을 수행 할 수 있습니다 :

if (something) { 
    // Do something 
    return; 
} 
// Do something else 

그 두 가지 스타일이 다른 최종 결과를 얻을시겠습니까 나는 일반적으로 다음 구문을 사용합니까? else 문에 코드를 래핑 할 필요가 없습니다. 내 생각에 if 문이 true로 평가되고 반환되면 아래의 코드가 실행되지 않습니다. true를 평가하지 않으면 else 문에 래핑되었는지 여부에 관계없이 아래 코드가 실행됩니다.

맞습니까?

+1

예, 올바른 '반환'을 사용하는 한. 한 줄 또는 두 줄의 코드라면 두 번째 방법을 선호합니다. 그러나 그 이상으로, 첫 번째 방법은보다 읽기 쉽고 직관적 인 IMO입니다. – Leigh

+4

모든 프로그래밍 언어에서이 아이디어에 대한 철저한 토론은 http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement를 참조하십시오. 당신의 예제 # 2는 Fowler에 의해 "Guard Statement"라고 불립니다. – orangepips

+0

@orangepips +1 멋진 스레드 – Leigh

답변

4

ColdFusion이 같은 일을 달성하는 여러 가지 방법을 제공합니다 선호한다. 프로그래머의 임무는 상황에 맞는 것을 선택하는 것입니다. 물론 "정확하다"는 해석이 많지만 정확한 방법은 명확하고 간결하며 확장 성이 있다고 말할 수 있습니다.

이 경우 실제 성능이나 "코드 줄"차이점이 없습니다. 완전히 다른 지점의 코드를 사용하는 것은 눈에 띄지 않지만 잘못된 조건으로 인해 함수에서 벗어나기 위해 초기 리턴 스타일을 사용하는 것이 더 명확합니다. 나는 목록에 적용 할 검증을 모두 볼 수 있습니다

if (not isdefined("url.param1")) { 
    return; 
} 
if (not len(url.param1)) { 
    return; 
} 
if (not refind("[0-9]+", url.param1)) { 
    return; 
} 
doSomethingToValid(url.param1); 

첫 번째 경우에

if (isdefined("url.param1")) { 
    if (len(url.param1)) { 
    if (refind("[0-9]+", url.param1)) { 
     doSomethingToValid(url.param1); 
    } 
    } 
} 

대와 나는 정면 길에서 모든 것을 얻을 수 있습니다 : 다음과 같은 경우를 고려 일상의 실제에 초점을 맞출 수있게 해줍니다. 두 번째 경우에는 if의 중첩 된 부분에 루틴의 상당 부분을 묻어 두었습니다. 코드 구조가 좀 더 복잡 해지는 다른 규칙을 추가해야 할 필요가 있습니다.

+0

닉, 이것은 내가 직접 발견 한 상황입니다. 감사합니다. 이것은 매우 유용했습니다. – Mohamad

2

이 같은 결과를 반환합니다 쓰기의 두 가지 방법이 있지만, 가독성을위한 첫 번째 방법은 대부분의 언어와 같은

관련 문제