2010-02-25 3 views

답변

7

반환하기 전에 임시 변수에 지정하면 newPerson() 내에서 오류 검사 및 수정을 수행 할 수 있습니다. 새 호출을 반환하려면 newPerson() 메서드 호출자가 오류를 포착하고 복구해야합니다.

+2

변수에 대한 추가 액세스가 완료되면 더 이상 시나리오가 존재하지 않으므로 의문의 여지가 없습니다. – Robin

+0

정말, 코드 검토에서이 메소드의 존재에 대해 의문을 가질 수 있습니다. 일부 기본값을 가진 Person을 반환하는 한 줄의 새로운 *() 루틴? newPerson() 루틴으로 "new Person()"호출을 통해 몇 가지 추가 기능을 제공하지 않을 경우 newPerson()은 유용성이 제한된 IMO 메소드입니다. 왜 그냥 가지고 있지 : public Person() {...} 생성자? 메서드 호출 레이어가없는 경우와 동일합니다. 그들은 메소드에 대해 똑같이 좋지 않은 선택이지만 최소한 첫 번째 양식은 새로운 Person()을 스스로 호출하지 않는 사용자에게 유용한 것을 할 수있는 기회를 제공합니다. –

+0

이 예제의 메서드는 간단합니다. 라이브 코드에서 사용하는 실제 메서드를 게시하는 것보다 간단한 예제를 사용하는 것을 선호합니다. – mheathershaw

1

아무도 다른 것보다 효율적이지 않습니다. JIT는 런타임시 가장 효율적으로 인라인 할 것입니다.

0

하나는 다른 것보다 효율적이지 않지만 생성 된 객체를 직접 반환하는 것은 임시 변수를 적게 사용하기 때문에 아마도 더 깨끗합니다. 임시 변수를 사용해야하는 경우 final으로 만들고 적절하게 이름을 지정하십시오.

+0

임시 변수의 위치를 ​​명확히하십시오. 나는 항상 P가 인스턴스화되고 P에 대한 참조가 반환되지만 항상 그렇습니다. P를 선언하지 않으면 객체가 여전히 인스턴스화되고 참조가 전달됩니다. –

+1

java는 VALUE로 변수를 전달합니다. P와 P의 사본을 반환시 범위에서 벗어납니다. –

+0

@ fuzzy가 말한 것. 좋은 컴파일러는 구현을 최적화 할 수 있지만, 소스 코드에 관한 한'p'는 임시 변수입니다. 그것은 단순히 그것이 무엇인지 불렀습니다. 항상, 항상있을 것입니다. – polygenelubricants

16

성능면에서 다른 하나를 선택하는 데 차이가 없습니다.

  • 디버깅을 위해 전자가 더 좋습니다 - 실행을 추적하거나 생성과 반환 사이에 정보를 기록하고 싶을 때.
  • 가독성을 위해 (주관적이지만) 후자가 더 좋습니다.

일반적으로 나는 후자에 대한 조언을하고, 이것을 디버깅해야 할 때마다 첫 번째 (두 줄) 변형으로 임시 전환을하십시오.

+0

나는 둘 다 다른 것보다 읽기 쉽다고 주장 할 것입니다. 그렇다면 임시 스위치를 만드는 이유는 무엇입니까? 두 패턴 중 하나에 대해 JIT 컴파일러가 생성하는 코드는 100 % 동일 할 수 있습니다. 차이 없음. 따라서 첫 번째 패턴이 조금이라도 장점이 있다면, 그냥 사용하지 않고 (아니면 적어도 변경 한 후에 그대로 두는 것)? –

+2

글쎄, 나를 위해 그것을 즉시 반환하는 것이 더 읽기 쉽습니다. 그러나 디버거를 사용하여 추적 할 때 두 줄로 표시하는 것이 훨씬 편리합니다. 그 사이에 디버깅 정보를 기록하십시오. – Bozho

+3

가독성이나 디버깅 가능성을 최적화하는 경우에 이르면 코드가 디버깅 된 것보다 훨씬 (사람이) 읽는다 고 주장 할 수 있습니다. –

0

두 번째 옵션은 더 짧고 읽기 쉽습니다.

나는 괜찮은 Java 컴파일러가 첫 번째 옵션에 대한 효율성이 낮은 코드를 만들지는 모르겠다.

1

정상적으로 보면 동일한 성능의 바이트 코드로 컴파일되므로 성능면에서 동일합니다. 그런 다음 유일한 차이점은 인간을위한 것입니다 : 임시 변수 약간 쉽게 디버깅을하게 만들기

: 당신이 return 문에 중단 점을 넣고 p의 값을 검사 할 수 있습니다. 한 줄 버전에서는이 작업이 더 어려워집니다.

은 변수를 제거하므로 복잡성이 줄어들어 코드를 약간 더 읽기 쉽습니다.

실제로는 한 줄로 작성하고 최악의 경우 디버깅 문제가 발생하면 임시 변수를 만듭니다. 게다가, 단위 테스트가 디버깅의 필요성을 없애기로되어 있지 않습니까? :-)

관련 문제