대입과 표현식에서의 변형

대입과 표현식에서의 변형 (Variants in assignments and expressions)

위 정의에서 보았듯 대부분의 단순 타입은 variant에 대입할 수 있어요. 마찬가지로 variant도 단순 타입에 대입할 수 있어요. 가능하면 variant의 값이 대입되는 타입으로 변환되죠. 이건 실패할 수도 있어요. 문자열을 담은 variant를 정수에 대입하면, 문자열이 유효한 정수를 나타낼 때만 성공해요. 다음 예제에서 첫 번째 대입은 동작하고, 두 번째는 실패해요.

출처: Variants in assignments and expressions

본문

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가 느릴 수 있어요.