프로시저는
결과를 돌려주지 않고, 함수의 결과를 돌려준다

프로시저와 함수의 정의는 크게 부분으로 나누어 진다. 한가지는 프로그램의 다른 부분에서 해당 프로시저와 함수의 선언을 정의하는 부분이고, 다른 부분은 실제 프로시저나 함수의 내용을 적는 부분( 개의 문장들로 이루어진 블록)이다

Procedure <프로시저 이름>(매개변수목록);

[선언부]

begin

   [문장들]

end;


예) 

Procedure ReverseStr(s: String);

Var

   r: String;

   i: Byte;

Begin

   // 문자열 변수 r (null) 설정한다.

   r := ' ';

   // 문자열을 마지막 문자부터 첫번째 문자까지 반복한다.

   for i := length(s) downto 1 do

      // s내의 문자를 r 끝에 연결한다.

      r := r + s[i];

   // Memo객체를 비우고 결과를 나타낸다.

   Form1.Memo1.Lines.Clear;

   Form1.Memo1.Lines.Add(r);

End;


Procedure 프로시저의 시작임을 알리는 예약어 이며, <프로시저 이름> 프로시저를 호출할 사용되는 이름이다. (매개변수목록) 프로시저를 호출한 쪽에서 프로시저에게 넘겨주는 입력값들의 목록이고, [선언부] 프로시저에서 사용할 변수나, 상수, 레이블들을 선언하는 곳이다. 만약 사용되는 변수나 상수들이 없다면 생략가능하다. 마지막 [문장들] 실제 프로시저의 행위를 정의하는 문장들이다



Function <함수 이름>(매개변수목록):<리턴타입>;

[선언부]

begin

   [문장들]

end;


예) 

Function Reverse(s: String) : String;

Var

   r: String;

   i: Byte;

Begin

   r := ' ';

   For i := length(s) downto 1 do

      r := r + s[i];

   Reverse := r;   // Result := r 같은 결과를 얻을 있다.

End;



함수와 프로시저를 호출

Procedure Tform1.Button1Click(Sender: Tobject);

Begin

   ReverseStr(Edit1.text);                     // 프로시저를 호출하는 경우

   Memo1.Lines.Add(Reverse (Edit1.Text));      // 함수를 호출하는 경우

End;


매개변수 전달방법

Call by value

방법에서는 변수를 값으로 전달하는 방식으로 컴파일러는 변수의 값을 복사하여 원래 값이 아니라 복사한 값이 전달된다. 그러니까 윈도우 탐색기에서 파일을 복사하여 다른 디렉토리에 붙여쓰기를 하는 것처럼, 변수의 내용을 복사하여 프로시저의 매개변수로 붙여쓰기하는 것과 마찬가지라고 생각하면 좋을 싶다.

그러면 프로시저내에서 매개변수를 지지고 볶든 간에, 원래 변수에 저장되어 있던 값들은 그대로이다.

Procedure add(x,y : integer);

 

Call by Reference

방법은 변수의 값을 복사하여 쓰는 것과는 달리, 방번호는 같은데 변수와 매개변수의 사용하는 이름이 다르다고 생각하자. 100 방에 있는 값을, 호출할 때는 A(변수)라고 부르고 프로시저에서는 A1(매개변수)이라고 부른다고 가정하면 같은 방에 있는 값이므로 A1 바뀌면 A 자연히 따라 바뀌게 되는 것이다.

Procedure ReadData(Var rec : string);


Call by Const

상수로 매개변수를 전달하는 것은 프로시저 내에서 값을 변경하지 못하도록 컴파일러에 알린다.

아래의 예처럼 매개변수 s const 전달하는 경우는 WriteData라는 프로시저 안에서 s 값을 바꿀 수가 없다. Read Only 변수라고 생각하면 되겠다.

 

Procedure WriteData(const s : string);



출처 : 델파이 4 中 발췌

'공부방 > Delphi' 카테고리의 다른 글

[델파이] 클래스의 가시성  (0) 2010.07.15
[델파이] 오브젝트, 인스턴스, 클래스  (0) 2010.07.14
[델파이] Case 문법  (0) 2010.07.14
[델파이] 기본 컴포넌트  (0) 2010.07.14
[델파이] 문자열 관련 함수  (0) 2010.05.18

+ Recent posts