2014-07-19 1 views
1

개체를 사용하여 함수를 호출 할 때 해당 함수를 호출하기 전에 함수에서 null을 확인해야합니까? 더 나은 프로그래밍 실습은 무엇입니까? 같은프로그래밍 스타일 : 함수 나 함수에서 null을 확인해야합니까?

뭔가이

Test a = getTest(); 

if (a != null) { 
    myFunc(a); 
} 

def myFunc(x): 
    print x.val(); 

또는

Test a = new Test(); 

myFunc(a); 

def myFunc(x): 
    if (x != null) { 
     print x.val(); 
    } 

또는

Test a = new Test(); 

if (a != null) { 
    myFunc(a); 
} 

def myFunc(x): 
    if (x != null) { 
     print x.val(); 
    } 

기능에 널 체크를 넣는 것이 좋은 이유 당신이하지 않기 때문에 내가 볼 수 있습니다 사방을 확인해야하지만 때로는 함수를 호출하기 전에 검사해야하기 때문에 t를 확인하는 것이 불필요하다고 느낍니다. wice ...

아무도 이것을 설명 할 수 있습니까?

+0

@unclebobmartin. 'printf'는 널 포맷 문자열을 검사합니까? 'strcpy'는 null 소스 또는 목적지를 확인합니까? 'fwrite'는 널 포인터 나 버퍼를 검사합니까? 그들이 그렇게한다면, 당신도 그렇게해야합니다. –

답변

1

의도 된 사용 및/또는 코드 배포에 따라 달라질 것이라고 생각합니다. 이것은 실제로 의견을 바탕으로하지만 나는 "수세 프로그래밍"에 대한 밥 삼촌의 견해에 동의합니다. 귀하의 사용 또는 팀 사용을위한 라이브러리라면 동료가 함수 권한으로 null을 전달하지 않는다고 믿은 후에 방어 프로그래밍을 피해야합니다.

사용자가 사용할 수있는 공용 API를 작성하는 경우 적절한 검사를 수행해야합니다. 특히 null을 전달하면 충돌이 발생할 수 있습니다.

비공개 API의 방어 프로그래밍은 TDD를 사용하지 않는 팀의 냄새 및 증상 인 입니다.

당신이 생태계에 혼합 표준 라이브러리 함수가 무엇을하고 싶은 경우

+0

주장도 도움이됩니다. – user1095108