FreePascal Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
FreePacal 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

FreePascal 팁&트릭
[17] FreePascal에 추가된 언어 기능들
박지훈.임프 [cbuilder] 8956 읽음    2013-02-23 11:51
원문: 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;



다른 유용한 추가 기능을 아시면 제게 알려주시면 추가하겠습니다.
김도완 [purplecofe2]   2013-02-24 13:28 X
http://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&revision=23580

2월 6일 업데이트에 type helper라는게 추가되었습니다.


+ -

관련 글 리스트
17 FreePascal에 추가된 언어 기능들 박지훈.임프 8956 2013-02-23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.