메소드 이름이 “Try”로 시작하는 경우의 의미에 대해 동료들과 논의했습니다.
다음과 같은 의견이있었습니다.
- 메소드가 널값을 리턴 할 수있는 경우 “시도”를 사용하십시오.
- 메소드가 예외를 발생시키지 않으면 “시도”를 사용하십시오.
공식적인 정의는 무엇입니까? 메소드 이름에 “시도”란 무엇입니까? 이것에 대한 공식적인 지침이 있습니까?
답변
이를 TryParse 패턴 이라고하며 Microsoft에서 문서화했습니다. 공식 예외 및 성능 MSDN 페이지는 말한다 :
예외와 관련된 성능 문제를 피하기 위해 일반적인 시나리오에서 예외를 발생시킬 수있는 멤버의 TryParse 패턴을 고려하십시오.
따라서 일반적인 유스 케이스에 예외가 발생할 수 있음을 의미하는 코드가있는 경우 (예 : 정수 구문 분석) TryParse 패턴이 의미가 있습니다.
답변
(수정 됨) Erik이 제안한 공식 지침이 있습니다.
TrySomething
방법을 볼 때에
- 던지지 않는다
- 보고
bool
- 값을 기대하면 ‘out’매개 변수를 통해 반환됩니다.
Something
내가 예외를 직접 처리 할 수있는 방법 이 있습니다 . (Jesse Webb가 제안한 편집)
답변
try
계속 진행하고 싶을 때 사용해야한다고 생각 합니다. 메소드가 값을 리턴하는지 여부는 중요하지 않습니다.
사례 1 : 문제가 없으면 어떻게 든 진행할 수 있습니다.
사례 2 : 반환되지 않으면 여전히 괜찮습니다. 다른 방법으로 진행할 수 있습니다.
그리고 해당 메소드의 출력으로 일부 값을 예상하면 out
매개 변수 를 사용하십시오 .
예
int value
if (dictionary.TryGetValue("key", out value))
{
// Proceed in some way
}
else
{
// Proceed in some other way
}
답변
메소드 호출이 유효하지 않은 결과를 생성 할 수 있다는 사실을 나타내려면 메소드 이름에 “Try”를 사용해야합니다. .NET 표준에 따르면 예외를 발생시키는 함수가 아니라 일부 VALID
또는NON_VALID
프로그램의 관점에서, 값입니다.
결국, 이것은 그룹에서 사용하기로 결정한 명명 규칙에 관한 것입니다.
답변
다음 try
과 같은 경우 메소드 이름 에 포함하십시오 .
- 당신은 예외를 던지지 않습니다
- 귀하의 방법에는 다음과 같은 서명이 있습니다.
bool TrySomething(input, out yourReturn)
따라서 기본적으로 try
-methods 를 사용 하면 부울 결과 만 반환됩니다.
따라서 다음 코드는 예외를 발생시키지 않습니다.
string input = "blabla";
int number;
if (int.TryParse(input, out number))
{
// wooohooo we got an int!
} else
{
//dooh!
}
이 코드는 예외를 던질 수 있지만 (이 경우) 예외를 던질 수 있습니다.
string input = "blabla";
int number;
try
{
number = int.Parse(input); //throws an exception
}
catch (Exception)
{
//dooh!
}
Try 메서드를 사용하는 것이 더 안전하고 방어적인 코드 작성 방법입니다. 또한 코드 스 니펫 # 2는 정수가 아닌 경우 실행하는 데 더 많은 성능이 필요합니다.
답변
Bob 아저씨는 아래 그의 책 Clean Code 에서 예를 보여줍니다 . 예외가 발생할 것으로 예상 될 때마다 Try
메소드 이름에 접두사를 사용할 수 있습니다 .
public void sendShutDown()
{
try{
tryToShutDown();
} catch (DeviceShutDownError e) {
logger.log(e);
}
}
그리고 나서 (적응) :
private void tryToShutDown()
{
//some code with no error handling, but
//something might go wrong here
}
tryToShutDown
메소드는 오류 처리를하지 않습니다 . 메소드의 책임이기 때문입니다 sendShutDown
.
그만큼 TryParse
Microsoft 패턴은 출력 매개 변수를 피해야한다는 명확한 코드 지침을 위반합니다.
새 버전의 C #을 개발하지 않는 경우 모든 Microsoft 지침을 준수 할 필요는 없습니다. 때때로 그들은 최고가 아닙니다.