2012-05-15 4 views
18

모든 프로그램에서해야하는 공통 조건은 변수가 할당되었는지 확인하는 것입니다.변수가 nil인지 확인하는 가장 좋은 방법은 무엇입니까?

은 아래의 문장을 보자

(1)

if Assigned(Ptr) then 
begin 
    // do something 
end; 

(2)

if Ptr <> nil then 
begin 
    // do something 
end; 

Assigned(Ptr)Ptr <> nil의 차이점은 무엇입니까?

+2

http://docwiki.embarcadero.com/Libraries/en/System.Assigned – TLama

+0

"어느 쪽이 더 낫습니까?"를 참조하십시오. 당신의 기준은 무엇입니까? –

+0

결과가 다를 수 있습니다. 내 대답은 아래를 참조하십시오 ... – Whiler

답변

30

그것은

두 번째 구문
function mfi: TObject; 
begin 
    Result := nil; 
end; 

procedure TForm1.btn1Click(Sender: TObject); 
type 
    TMyFunction = function: TObject of object; 
var 
    f: TMyFunction; 
begin 
    f := mfi; 

    if Assigned(f) then 
    begin 
    ShowMessage('yes'); // TRUE 
    end 
    else 
    begin 
    ShowMessage('no'); 
    end; 

    if f <> nil then 
    begin 
    ShowMessage('yes'); 
    end 
    else 
    begin 
    ShowMessage('no'); // FALSE 
    end; 
end; 

,이 함수의 결과를 확인합니다 ... 당신이 기능을 확인하는 경우를 제외하고 ... 일반적으로 동일합니다 아닌 함수 자체 ...

5

성능면에서 차이는 없습니다. 나는 인간이 더 빨리 의미를 파싱 할 수 있다는 것을 발견 할 때 개인적으로 두 번째 형태를 선호한다.

+11

매우 이상한 인간은 할당 된 것보다 읽기 쉬운'<> nil'을 찾습니다. 나는 개인적으로 똑같은 이유로 정확한 반대를 선호한다. 즉, 옵션 1을 구문 분석하기가 더 쉽다고 생각합니다. –

+0

가 <> 피연산자보다는 사람이 읽을 수 있도록해야한다고 말합니다. –

+2

나는 그 이유가 언뜻 보면 Assigned는 모든 이전 함수 호출이 될 수 있다고 생각합니다. –

관련 문제