질문을 둘러 보면서 최근에 자바에서 assert
키워드를 발견했습니다. 처음에는 흥분했습니다. 내가 모르는 뭔가 유용한 정보! 입력 매개 변수의 유효성을 검사하는보다 효율적인 방법! 예!Java가 어설 션되어 있습니까?
는하지만 나는 면밀한 관찰을했다, 나의 열정 "쉬어 아웃 완전히"하나의 간단한 사실로 "강화"순전히이었다. 당신이 주장을 해제 할 수 있습니다 *
이 악몽 같은 소리. 입력 listOfStuff
이 null
인 경우 코드를 계속 사용하지 않기를 바란다면 왜이 주장을 무시하고 싶습니까? 프로덕션 코드를 디버깅하고 있는데 을 잘못 전달했을 수도 있지만 그 애매 트의 로그 파일 증거가 표시되지 않는다고 의심되는 것처럼 들리 겠지만, 나는 listOfStuff
이 실제로 유효하다고 보냈습니다. 값; 또한 어설 션이 완전히 해제되었을 가능성에 대해 설명해야합니다.
그리고이 코드를 디버깅하는 것으로 가정합니다. 어설 션에 익숙하지 않은 사람은이를 볼 수 있으며 어설 션 메시지가 로그에 나타나지 않으면 listOfStuff
은 문제가되지 않는다고 가정합니다. assert
과의 첫 번째 만남이 야생에 있었다면 완전히 꺼져있을 수도 있습니다. 결국 try/catch 블록을 사용하지 않도록 설정할 수있는 명령 행 옵션이있는 것과는 다릅니다. (! 내가 약속이 질문이 아닌 호언 장담에 대한 변명입니다!)
모두의 내 질문에 날을 제공합니다 : 나는 무엇을 놓치고
?
assert
의 Java 구현을 렌더링하는 데 약간의 미묘한 차이가 있습니까? 명령 줄에서 활성화/비활성화하는 기능이 실제로 일부 컨텍스트에서 믿을 수 없을만큼 가치가 있습니까? if (listOfStuff == null) barf();
과 같은 구문 대신 프로덕션 코드에서 사용하는 것을 상상할 때 나는 그것을 어떻게 든 오해하고 있습니까?
나는 여기에 중요한 것이있어 보이지 않는다고 느낍니다.
* 기술적으로 말하자면, 실제로는 기본적으로 해제되어 있습니다. 그 (것)들을 켜기 위하여 당신의 방법에서 나가야한다. 그러나 여전히, 당신은 그들을 완전히 제압 할 수 있습니다.
편집 : Enlightenment requested, enlightenment received.
가장 중요한 것은 assert
이라는 디버깅 도구가 길어서 먼 길을 간다는 개념입니다.
개발자는 잘못된 입력이 불가능하다고 생각하기 때문에 프로덕션 환경에서 중요하지 않은 개인 메소드에 대한 입력 확인을 사용 중지해야한다는 개념에 여전히 문제가 있습니다. 내 경험에 따르면, 성숙한 생산 코드는 다양한 수준의 온전한 정도의 요구 사항을 급변하는 사람들을 대상으로 다양한 수준의 기술을 가진 사람들이 수년간 개발 한 미친 거대한 물건입니다. 나쁜 입력이 실제로 불가능하더라도 6 개월 후에 코딩하는 지루한 유지 보수가이를 바꿀 수 있습니다. The link gustafc provided (! 감사) 예를 들어이 포함되어
assert interval > 0 && interval <= 1000/MAX_REFRESH_RATE : interval;
생산 같은 간단한 검사를 비활성화하면 나 같은 바보 낙관적 친다. 그러나 이것은 코딩 철학의 차이이며 깨진 기능이 아닙니다.
또한, 나는 확실히이 같은 값 볼 수 있습니다 날이 기능을 이해하는 데 도움이 할 수있는 시간이 걸렸습니다 모두에게
assert reallyExpensiveSanityCheck(someObject) : someObject;
내 감사; 그것은 대단히 감사합니다.
이것은 호언 장담처럼 보입니다. 전혀 질문이 아닙니다. –
C 또는 C++에서 ASSERT를 사용한 적이 있습니까? 혹시 손가락으로 스냅을 켜거나 끌 수 있기를 바랬습니까? –
@ Joachim : 이해하지만 진지하게, 나는 깨달음을 찾고 있습니다. 이 기능은 실제로 나에게 부러진 것처럼 보입니다.하지만 "나는 내 코드에 어떤 문제가 있는지 보지 못하므로 컴파일러가 깨져야합니다!"라고 말하면서 비슷한 수준으로 느껴집니다. 나는 뭔가를 놓치고있는 것 같아. 내가 당신에게 호언 장담하지 않으면서도 그 기능이 나를 부러 뜨리는 이유를 표현할 수있는 방법을 제안 할 수 있다면, 나는 듣고있다. – BlairHippo