2009-07-09 5 views
2

루틴에서 무엇인가를 반환 할 때 가장 좋은 방법은 무엇입니까? 항상 상태 비트를 반환해야합니까 아니면 실패시에만 반환해야합니까? 예 :루틴에서 무언가를 반환 할 때 유용한 방법

성공시 반환 (0, "실패로 인해 ... ..."),
성공시 반환 (1, success_value, second_success_value).

또는

반환 (0, "... 때문에 실패했습니다.") 실패,
성공 반환 (success_value, second_success_value).

나는 보통 Perl로 프로그램하지만, 질문은 내가 프로그래밍하려고 시도 할 수도있는 언어를 나타냅니다. 감사합니다!

답변

3

대답은 언어에 따라 크게 달라진다. 당신은 사용하는 언어에 대한 관용구를 따라야합니다. 앞에서 언급 한 Perl의 관용구는 성공을 위해 0을 반환하고 실패를 나타내는 다른 값을 반환하는 것입니다. 예에서와 같이 여러 값을 반환해야하는 경우 그 중 하나는 항상 성공/실패 코드 일 수 있습니다.

예외를 지원하는 언어 (예 : Java, C#, C++)를 사용하는 경우 예외를 사용하여 예외 조건 (예 : 실패)을 나타내야합니다. 루틴이 정상적으로 완료되면 (예외가없는 경우) 성공했다고 가정 할 수 있으며 모든 반환 값을 안전하게 사용할 수 있습니다.

+0

@dave Perl 관용어가 어디서 0으로 돌아가는지 묻을 수 있습니까? 과거에 Perl 코드가 성공을 위해 1을 반환하는 것을 본 것처럼 보였습니다. 나는 내가 그것을 알 때 모범 사례를 사용하려고 노력하고, 당신이 제안한 것이 사실이라면 버릇을 바꿀 것입니다. – Akers

+0

이것이 내 DNA에 내장되어 있다고 생각합니다. 나는 참고 문헌을 생각할 수는 없지만, Perl의 유닉스 유산을 반영한다고 확신합니다. Google에 제안 할 수 있습니까? 성공의 한 가지 형태와 여러 가지 형태의 실패 만 있다는 아이디어도 있습니다. 그래서 성공을 위해 0을 선택하고 모든 가능한 실패에 대해 0이 아닌 것을 선택하는 것이 합리적입니다. – dave

+0

Perl Cookbook에 따르면 실패하면 undef/empty 목록을 반환하고 반환 만해야한다고 나와 있습니다. 인수 없이는 그렇게해야합니다. http://raca.teroristi.org/books/perl/OReilly_books/cookbook/ch10_11.htm –

1

이러한 언어를 지원하는 언어에서는 설명적인 예외를 throw해야합니다.

해당되는 올바른 유형의 예외가 발생한다 (예를 들어, ArgumentNullException 또는 닷넷에서 InvalidOperationException)

0

헤이 에이커 스, 나 자신에게 과거에 비슷한 질문을 ... 요청했습니다

이 답변 중 일부는

Is it bad practice to return Exceptions from your methods

내가 온 기본적인 결론은 호출자가 필요한 경우에만, 뭔가 아무것도 반환하는 것입니다 도움이 될 수 있습니다.

대부분의 경우, 내 메소드 Void를 만드는 것이 좋으며 무엇이 잘못되면 의미있는 예외가 발생하는 것으로 나타났습니다. 모든 것이 정상적으로된다면, 나는 호출자로서, 정말로 신경 쓰지 않는다.

관련 문제