저는 현재 대학 프로젝트를 위해 C#으로 작은 인공 지능 프레임 워크 (유전 알고리즘/신경망)를 개발 중입니다.어떻게 .NET의 알고리즘 코드에서 주장합니까?
첫 번째 관심사는 재사용 가능한 프레임 워크를 개발하는 것이므로 모든 것을 꽤 모듈화하도록 설계하고 있습니다. 나는이 (공연)에 대한 대가를 지불하고 있다는 것을 알고 있지만, 나는 그것을 잃을 때보 다 더 많은 것을 얻는다는 것을 느낀다. 모 놀리 식 코드 블록에 도입하기 어려운 새로운 것들을 추가하려고 할 때 버그를 발견하고 많은 시간을 낭비).
기본적으로 내 코드, 어설 션의 다른 부분에 대해 많은 검사를하고 싶습니다. 메소드 XI를 실제로 실행하는 경우 올바른 상태인지 확인하십시오. 그런 종류의 어설 션은 개발할 때 유용하지만 릴리스 코드에서 벗어나기를 바랍니다 (즉, 내가 떠나기로 결정할 때). 이 마지막 밤에 내 최종 연구 결과를 얻을). 방법
- System.Diagonists.Assert 제품군 :
나는 이것을 달성하는 여러 가지 방법을 볼 수 있습니다.
- 코드 (x)는 다음의 #if의 DEBUG로 둘러싸인 InvalidStateException()을 던져
- 는
당신이 그것을 할 것이다 어떻게 그리고 왜 #endif // 이는/갖는 계약합니다?
나는 단위 테스트도 알고있다. (나는 그것들을 사용하고있다.) 또한 코드에 대해서도 어떤 종류의 주장을하고 싶다. 이 방법
Util.Assert(a == b, "a == b");
통화 만 할 것이다 : Util
라는 클래스에 정의 된 방법을 가정,
[Conditional("DEBUG")]
public static void Assert(bool condition, string message)
{
if (!condition)
throw new InvalidStateException("Assertion failed: " + message);
}
그래서 같이 주장 :
코드 계약은 비슷한 방식으로 작동하지 않습니까? 나는 당신이 릴리스 모드에서 완전히 해제 할 수 있다고 생각 했었습니다. –
아마도. 솔직히 나는 그것에 익숙하지 않다. 내 대답의 기술은 내가 사용하는 기술이기 때문에 나는 그것을 공유 할 것이라고 생각했다. 코드 계약보다 더 좋든 나쁘지는 말할 수 없습니다. – cdhowie
나는 cdhowie가 말하는 것과 같이 갈 것입니다. 코드 계약은 훨씬 더 많은 것을 제공하지만 아마 당신이 필요로하는 것이 아닙니다. 그래서 올바른 도구 인라인 # if, # else 또는 Debug.Asset()보다는 코드를 인라인으로 어지럽히는 대신 Conditional 특성으로 꾸며진 메서드를 사용한다고 생각합니다. –