2012-07-30 3 views
1

전체 논리가 "이 조건이 참/거짓 인 경우이 항목을 반환하고 그렇지 않으면이를 반환합니다."라는 줄에 해당하는 함수에서이 항목에 대해 가장 좋거나 가장 받아 들여지는 형식은 무엇입니까? 내가 본 3 가지 방법이있는 것 같습니다.else 분기 및 return 문의 위치가 있습니까?

int function(bool foo){ 
    if(foo){ 
     return doSomething(); 
    }else{ 
     return somethingElse; 
    } 
} 

이 가장 의미가 있습니다,하지만 난 한 번 반환 값의 형태와 기능의 반환 형식이 지점에 위치하지 말았어야 읽었습니다. (왜, 소스는 말했다 결코) 그래서 다음이있다 :

지점 이외의 반환 유형을 가지고 있지만, 그것이 내가 생각하는 코드의 의미의 일부를 빼앗아, 나는 또한 읽은
int function(bool foo){ 
    if(foo){ 
     return doSomething(); 
    } 
    return somethingElse; 
} 

if-else 블록에는 이점이 있습니다. 마지막으로,이있다 (사람들은 무엇 소스 말 중 하나를하지 않았다) :

int function(bool foo){ 
    int result; 
    if(foo){ 
     result = doSomething(); 
    }else{ 
     result = somethingElse; 
    } 
    return result; 
} 

의미는 반환 지점의 외부에 있지만,이 아니었다 변수와 코드의 추가에 기능에 정말로 필요합니다.

제 질문은이 세 가지 형식 중 어떤 것이거나 다른 형식이 있다면이 형식으로 함수를 작성하는 가장 좋은 방법일까요?

+2

나는 두 번째를 선호하지만, 나는 그것이 전혀 중요하지 않을 것이라고 생각하지 않는다. 3 번째 함수는 함수마다 하나의 return 문을 사용한다는 원칙을 고수하지 않는 한, 나에게 조금은 어색한 것처럼 보입니다. – chris

+3

너무 주관적입니다. 나는 개인적으로 다음과 같이 쓸 것이다 :'return foo? doSomething() : somethingElse;'. – GManNickG

+1

좋은 읽기 [ "한 가지만 반환"이라는 개념은 어디에서 왔습니까?] (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come -에서). –

답변

1

좋은 질문입니다. 스타일, 가독성 및 다른 이유로 동일한 코드를 작성하는 근본적인 이유에 대해 생각하고 있음을 보여줍니다. 결국 그것은 당신에게 달려 있습니다.

1 번은 훌륭하고 매우 명확합니다.

숫자 2 나는 보통 오류 조건을 테스트 할 때 사용합니다. 내가 밑바닥까지 나아가면 성공을 되 돌린다. 보너스는 종종 선명도를 잃지 않고 중괄호를 떨어 뜨릴 수 있다는 것입니다.

숫자 3은 일반적으로 여러 가지 종류의 반환 값이 가능한 내부 루프에서 결과를 설정하거나 다른 호출에서 반환 값이 전달되고 중간 확인이 필요할 때 유용합니다. 아, 반환 값에 의존하지 않는 일반적인 정리를해야하는 경우에도 적절합니다.

간단한 경우 일반적으로 숫자 3을 사용하지 않습니다. 변수에 값을 저장해야하는 이유가 있습니다.

여기 네 번째 옵션 인 query-colon 연산자가 있다고 주장 할 수 있습니다.

int function(bool foo) { return foo ? doSomething() : somethingElse; } 

) = 당신이 간단한 클래스 멤버를 인라인하는 것은 좋은 스타일이라고 생각하면 유용한 당신이 그것을 볼 때 한 줄에 그 보통이기 때문에 썼다.