문제

그래서 나는 오늘 아침에 다음과 같이 보이는 코드를 발견했습니다.

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}

이제이 코드는 정상으로 컴파일하고해야 할대로 작동하지만, 특히 관련이있는 경우 시도 블록 내에서 돌아올 권리가 없습니다.

내 주요 문제는 마침내 자신의 제외를 던지면 어떻게됩니까? 반환 된 변수가 있지만 처리 할 예외도 있습니다. 그래서 다른 사람들이 시도 블록 내에서 돌아 오는 것에 대해 어떻게 생각하는지 알고 싶습니까?

도움이 되었습니까?

해결책

아니요, 나쁜 연습이 아닙니다. 퍼팅 return 의미가있는 경우 가독성과 유지 관리를 향상시키고 코드를 이해하기에 더 간단하게 만듭니다. 당신은 신경 쓰지 않아야합니다 finally a return 성명서가 발생합니다.

다른 팁

마침내는 무엇이든 상관없이 실행되므로 중요하지 않습니다.

개인적으로, 나는 마지막으로 진술하기 전에 반환 진술을보고 싶지 않기 때문에 이런 종류의 코딩을 피할 것입니다.

내 마음은 간단하고 일을 선형으로 처리합니다. 그러므로 드라이 러닝을위한 코드를 걸을 때, 나는 일단 반환 문에 도달 할 수 있다면,이 경우에 꽤 잘못된 모든 것이 중요하지 않다고 생각하는 경향이있을 것입니다. 부작용이 무엇인지).

따라서, 나는 마지막 명령문 이후에 return 문이 항상 나타나도록 코드를 정리할 것이다.

이것은 당신의 질문에 대답 할 수 있습니다

시도에서 실제로 일어나는 일 {return x; } 마침내 {x = null; } 성명?

그 질문을 읽음으로써 예외를 던질 수 있다고 생각되면 마지막 진술에서 또 다른 시도 캐치 구조를 가질 수있을 것 같습니다. 컴파일러는 값을 반환 할시기를 파악합니다.

즉, 어쨌든 코드를 재구성하는 것이 더 나을 수도 있으므로 나중에 당신을 혼동하지 않거나 이것을 알지 못하는 다른 사람도 혼동하지 않습니다.

기능적으로 차이가 없습니다.

그러나 이것을하지 않는 이유는 한 가지가 있습니다. 여러 출구 포인트가있는 더 긴 방법은 종종 읽고 분석하기가 더 어렵습니다. 그러나 그 반대는 캐치와 마침내 블록보다 반환 진술과 더 관련이 있습니다.

귀하의 예에서 어느 쪽이든 동등한 방법으로 컴파일러가 동일한 코드를 생성 한 경우에도 놀라지 않습니다. 마지막으로 블록에서 예외가 발생하면 반환 명령문을 블록에 있거나 외부에 놓는지 여부에 관계없이 동일한 문제가 있습니다.

실제 질문은 스타일이 가장 좋습니다. 나는 내 방법을 작성하여 하나의 리턴 명령문 만 있도록 내 메소드를 작성하고 싶습니다.이 방법으로 메소드의 흐름을 쉽게 볼 수 있습니다. 또한 반환 문을 마지막으로 두는 것을 좋아하므로 그것이 방법의 끝과 이것이 반환되는 것입니다.

나는 마지막 진술만큼 깔끔하게 배치 된 반환 진술로, 다른 사람들은 와서 여러 반환 진술을 그 방법의 다른 부분에 뿌릴 가능성이 적다 고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top