원문:
http://freepascalanswers.wordpress.com/2013/01/26/language-additions/
다음은 프리 파스칼 컴파일러에서 오브젝트 파스칼 프로그래밍 언어에 추가된 새로운 개선점들입니다. 그 전체를 다 알고 있지는 못하지만 적어도 아래 기능들은 델파이 7 언어 이후 새로 추가되었습니다. 이전에 알지 못했기 때문에 저도 아직 이들 기능들을 써보지 못했네요.
1. For .. in 루프
문자열의 문자들에 대해 루프를 돌기 위해 다음과 같은 문법을 사용할 수 있습니다.
procedure ForInLoop(aStr: string);
var
ch: Char;
begin
for ch in aStr do
WriteLn(ch);
end;
or through set items:
procedure ForInSetLoop;
var
s: set of 1 .. 100;
i: Integer;
begin
s:= [1, 3, 7];
for i in s do
Writeln(i);
end;
2. += 연산자
이 새 연산자는 문자열을 연결하거나 숫자에 값을 더할 때 사용할 수 있습니다.
var
aName: string;
begin
aName:= 'Free';
aName += ' Pascal';
Writeln(aName); // Free Pascal
end;
숫자에 대해서는,
x:= 10;
x+= 15;
Writeln(x); // 25
3. OOP와 무관한 속성
OOP가 아닌 코드에서 속성을 선언할 수 있습니다.
var
x: Integer;
procedure SetX(aX: Integer);
begin
x:= ax;
end;
function GetX: Integer;
begin
Result:= x;
end;
property MyX: Integer read GetX write SetX;
// Main program
begin
MyX:= 170;
Writeln(MyX);
end.
4. 비트 팩드 레코드
비트들의 레코드를 선언하고 바이트로 표시할 수 있습니다.
type
tbit = 0..1;
tBitsByte = bitpacked record
bit0 : tbit;
bit1 : tbit;
bit2 : tbit;
bit3 : tbit;
bit4 : tbit;
bit5 : tbit;
bit6 : tbit;
bit7 : tbit;
end;
var
aByte: tBitsByte;
begin
aByte.bit0:= 1;
aByte.bit1:= 0;
aByte.bit2:= 1;
Writeln(Byte(aByte)); // 5
5. Sealed class
sealed 키워드를 사용하면 클래스를 상속하는 것을 막을 수 있습니다.
TMyClass = class sealed
private
fValue: Integer;
public
constructor Create(aValue: Integer);
destructor destroy; override;
function GetValue: Integer;
end;
이 기능이 왜 필요한지 보여주는 좋은 예제 코드를 아직 찾지 못했습니다만, 향후에 쓸 일도 있겠지요.
6. 클래스 메소드와 변수
객체가 초기화되기 전에 클래스 이름으로 사용할 수 있는 메소드 및 변수를 선언할 수 있습니다. 이것은 자바의 static 메소드와 비슷합니다.
TMyClass = class sealed
private
class var fValue: Integer;
public
constructor Create(aValue: Integer);
class function GetValue: Integer;
class procedure SetValue(aValue: Integer);
end;
constructor TMyClass.Create(aValue: Integer);
begin
inherited Create;
fValue:= aValue;
end;
class function TMyClass.GetValue: Integer;
begin
Result:= fValue;
end;
class procedure TMyClass.SetValue(aValue: Integer);
begin
fValue:= aValue;
end;
// Main code
begin
TMyClass.SetValue(900);
Writeln(TMyClass.GetValue);
end.
7. 문자열에 대해 case 문 사용
case aName of
'Free Pascal': Writeln('Lazarus IDE');
'C++': Writeln('CodeBlocks IDE');
end;
다른 유용한 추가 기능을 아시면 제게 알려주시면 추가하겠습니다.
2월 6일 업데이트에 type helper라는게 추가되었습니다.