대입과 표현식에서의 변형
대입과 표현식에서의 변형 (Variants in assignments and expressions)
위 정의에서 보았듯 대부분의 단순 타입은 variant에 대입할 수 있어요. 마찬가지로 variant도 단순 타입에 대입할 수 있어요. 가능하면 variant의 값이 대입되는 타입으로 변환되죠. 이건 실패할 수도 있어요. 문자열을 담은 variant를 정수에 대입하면, 문자열이 유효한 정수를 나타낼 때만 성공해요. 다음 예제에서 첫 번째 대입은 동작하고, 두 번째는 실패해요.
본문
program testv3;
uses Variants;
Var
V : Variant;
I : Integer;
begin
V:='100';
I:=V;
Writeln('I : ',I);
V:='Something else';
I:=V;
Writeln('I : ',I);
end.
첫 번째 대입은 동작하지만 두 번째는 동작하지 않아요. Something else가 유효한 정수 값으로 변환될 수 없기 때문이죠. 결과적으로 EConvertError 예외가 발생해요.
variant를 포함한 표현식의 결과는 다시 variant 타입이지만, 그 결과를 다른 타입의 변수에 대입할 수 있어요. 그 타입으로 변환될 수 있다면요.
variant를 포함한 표현식은 평가에 더 많은 시간이 걸리므로 주의해서 사용해야 해요. 계산이 많다면 variant 사용을 피하는 게 좋아요.
암묵적 타입 변환(예: byte에서 integer로, integer에서 double로, char에서 string으로)을 고려할 때, 컴파일러는 variant가 표현식에 명시적으로 나타나지 않는 한 variant를 무시해요.
더 알아보기
variant를 일반 타입에 대입할 때는 변환 실패(특히 EConvertError)를 항상 염두에 두세요. 자주 쓰이는 계산에는 variant가 느릴 수 있어요.