프로시저는 결과를 돌려주지 않고, 함수의 결과를 돌려준다
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);
출처: http://foco85.tistory.com/162 [래채'sTory]
'IT > Delphi/C#' 카테고리의 다른 글
[델파이] Indy를 이용한 네트워크 프로그래밍 (0) | 2018.02.05 |
---|---|
[Delphi|델파이] 콤보박스 스타일속성 (0) | 2017.09.26 |
[Delphi|델파이] 함수명으로 컴포넌트 이벤트찾기 (0) | 2017.09.26 |
[Delphi | 델파이] 델파이에서 사용되는 파일 확장자명 (0) | 2017.09.13 |
[Delphi | 델파이] 유닛의 정의 (0) | 2017.09.13 |