ThePragmaticProgrammer라면 지켜야할 ComputerProgramming 습관중 하나.

절대로 일어날 수 없는, 일어나서는 안되는 일이 있다면, 아예 그것을 확실히 하기위해 assertion을 사용한다. 그러면, 만에하나 그일이 벌어졌을 경우, 바로 알 수 있고 에러에 쉽게 대처할 수 있다.

혹자는 AssertiveProgramming 자체가 프로그램에 overhead가 되므로, 일단 완성된후 배포하기전 assert를 모두 해제하라고 하기도 한다. 프로그램의 속도를 위해서... 그러나, ThePragmaticProgrammer는 절대로 그러지 않는다. assert없는 프로그램이 내부적으로, 로그파일을 망가뜨릴지, 시스템메모리를 잡고 안놓아줄지 전혀 알길이 없다. 그래서 배포시에도 assert를 켜놓는다.


Python에는 assert 문이 있다.

   1 assert boolean-expression

조건식이 false면 exception을 발생한다. 다음의 팩토리얼 계산예제를 보라

   1 """Example of Recursion and PyUnit and AssertiveProgramming and FunctionalProgramming
   2 """
   3 
   4 import unittest
   5 
   6 def fact(aNum):
   7     assert aNum >= 1 and type(aNum) == int
   8     if aNum == 1:
   9         return 1
  10     else:
  11         return aNum * fact(aNum-1)
  12 
  13 factFP = lambda n: n<=1 and 1 or factFP(n-1)*n
  14 
  15 class FactorialTest(unittest.TestCase):
  16     def test1(self):
  17         self.assertEquals(1, fact(1))
  18     def test2(self):
  19         self.assertEquals(2, fact(2))
  20         self.assertEquals(6, fact(3))
  21     def testNegativeOrFloat(self):
  22         self.assertRaises(AssertionError, fact, -2)
  23         self.assertRaises(AssertionError, fact, 1.1)
  24     def testOtherTypes(self):
  25         self.assertRaises(AssertionError, fact, 'a')
  26         
  27 if __name__=='__main__':
  28     unittest.main(argv=('','-v'))

또한, 정 assert를 꺼놓고 싶다면 -O 옵션을 쓰면 된다. Python 최적화 컴파일 - 즉 assert 꺼놓기


J2SE 1.4 이상의 Java에도 assert 문이 있다.

   1 assert boolean-expression;
   2 assert boolean-expression: information-expression;

컴파일시 -source 1.4 옵션을 줘야한다. 실행시도 -enableassertions 옵션으로 assertion 은 켜야 한다. 길다면 -ea 로 쓴다.

Python 과 마찬가지로 boolean-expression 이 false 면 exception 을 발생한다. information-expression 은 exception stack trace 부분에 표시된다.


CategoryManual

AssertiveProgramming (last edited 2012-09-04 22:04:38 by 221)

web biohackers.net