2013년 3월 12일 화요일

델파이 1장 - 1

델파이는 c언어와 비슷하면서도 약간 다르다.
다른 부분만 다루어 보겠다~(내가 귀찮아서 이러는게 아니다)

전체적인 구조
---------------------------------------------------------

unit 유닛이름;

interface  (전역변수)

implementation (지역변수)

Initialization  (생성자)

Finalization  (파괴자)

end. (프로그램 끝)
  • interface - 모든 프로그램 또는 다른 유닛에서도 함께 사용할 수 있다(전역변수)
  • implementation - 선언된 현재 유닛에서만 사용이 가능하다.(지역변수)
  • Initialization - 초기처리를 위한 공간. interface에 정의된 데이터 구조의 초기화 및 필요한 자원 할당을 위한 문장을 기술함(생성자)
  • Finalization - Initialization에서 할당된 프로그램에서 사용했던 자원을 되돌리는 문장을 기술함 (파괴자)
----------------------------------------------------------
초간단 문법 설명!!

주석은 //, {}, (**) 를 사용한다.
; 는 코드 한줄의 끝
. 은 프로그램의 끝 (가장 끝에 end.라고 되어 있다.)
begin end; 는 한 쌍으로 사용한다.(c언어에서 {}에 해당한다. - 열라 귀찮게 ㅡㅡ)
:= 오른쪽에 있는 어떤 값을 왼쪽에 저장할 때 사용(a := Integer) 

변수 선언 방법
var
  x, y : integer;   //같은 형이면 ,로 쓸수 있다.
  p : ^integer;     //^는 포인터의 주소가 가르키는 값이다.
begin
  x := 17;
  y := 0;
  p := @x;  //@연산자는 포인터 변수에게 주소를 넘기는 연산자(x의 주소를 알려달랑께)
  y := p^;   //^포인터의 주소가 가르키는 값(p의 주소 안에 있는 값을 내놓으랑께)
end; 

---------------------------------------------------------------
배열 선언

예)
배열명 = array[배열요소수, 배열요소수] of 자료형;

예제) 
unit 유닛명;

interface
//0~2까지의 공간을 가지는 정적인 배열을 지정
type
   Country = array[0..2] of string;
var
   i:integer;
  s:string;
  Countries : Country;

implementation
initialization
//할당된 정적 배열 Countries에 초기값을 할당
begin
  Countries[0] := 'Korea';
  Countries[1] := 'Japan';
  Countries[2] := 'Etc';
end;
end.
---------------------------------------------------------------
레코드 형 선언(구조체)
  • 다양한 자료형을 연속된 기억 공간에 보관
  • 모든 레코드 요소는 다른 자료형을 가질수 있음
  • 크기가 서로 다른 자료형의 레코드 멤버가 연속된 기억 공간을 사용
레코드 형 = Record
   필드명 : 자료형;
   필드명 : 자료형;
end;
-----------------------------------------------------------------
프로시저
  • 프로그램을 기능별로 분리하여 코딩을 더욱 간편하게 함
  • 프로시저 선언이란 유닛의 Type 부분에 프로시저 원형을 적어주는 것
  • 프로시저 선언은 유닛의 interface 부분에 선언
procedure 프로시저 이름 (<매개변수이름>:<매개변수타입>,<매개변수타입:매개변수타입>);

예제)
procedure clear (var A : array of Double);
var 
   i : Integer;
begin
   for i := 0 to High(A) do A[i] := 0;
end;
-----------------------------------------------------------------
함수
  • 리터럴(C언어의 return)값을 반환한다는 점을 제외하면 기본적으로 프로시저와 같음
  • 함수도 프로시저와 마찬가지로 먼저 선언해야함
  • Function 예약어 사용
  • 반환값은 지시어 Result를 사용하여 반환
function 함수명 (매개변수이름:매개변수타입):반환타입;
const 
   상수명 = 리터럴값;
var
   변수명 : 자료형;
begin
   statement1;
   statement2;
end;

예제)
function Add(x,y: integer):integer;
begin
   Result := x + y;
end;
-----------------------------------------------------------------
매개변수 전달 방식
1. Call by Value
변수를 값으로 전달하는 방식. 컴파일러는 값을 복사하여 원래의 값이 아닌 복사한 값을 전달 함 루틴 안에서 변수값을 변경할 수 있음
procedure Add(x,y : integer);

2. Call by Reference
변수의 메모리 위치를 프로시저에 전달하는 방식으로, 프로시저는 해당 메모리 위치의 내용을 변경할 수 있음.
procedure Add(Var Rec:String);

3. Call by Const
상수로 매개변수를 전달하는 방식으로 프로시저 내에서 변수 값은 변경할 수 없고, 참조만 가능
procedure Add(Const x,y : integer);

4. 출력 파라미터
Out 파라미터는 참조에 의해 전달되는 방식. Out 파라미터는 출력용으로만 사용.
procedure Add(Out a : String);
---------------------------------------------------------------------
Overload 루틴
  • 하나의 유닛에는 같은 이름의 함수나 프로시저를 선언할 수 없음
  • Overload를 사용하면 동일한 범위에서 같은 이름으로 하나 이상의 프로시저와 함수를 선언할 수 있음
  • 호출 시 파라미터 리스트의 차이에 의해서 구분 됨
Function divide(x,y : Integer) : Integer; Overload;
Function divide(x,y : Real) : Real; Overload;
---------------------------------------------------------------------
연산자

연산자는 c와 거의 비슷하다. 틀린 것만 쓰겠다.

  • Div 는 정수형 나눗셈(어차피 /가 정수, 실수를 나눌 수 있으니 /쓰자 -_-)
  • Mod 는 나머지 값(C에서 %와 같다)
  • Shl 은 왼쪽으로 비트 이동
  • Shr 은 오른쪽으로 비트 이동
  • @ 연산자는 변수, 프로시저, 함수 또는 메소드의 주소를 계산하기 위해 사용
  • <> 는 같지 않다. (C는 != )
---------------------------------------------------------------------
초 간단하게 문법을 대충 봤다(너무 대충이라도 나만 알면 장땡 ㅡ.ㅡ)
내일은 본격적으로 프로그램을 만들어 볼꺼다.
근데 프로그램 만들면 어찌 여기에 올리지 ㅡㅡ??








댓글 없음:

댓글 쓰기