Basic Pascal Tutorial/Chapter 4/Parameters/ja

From Free Pascal wiki
Revision as of 20:29, 13 August 2015 by Derakun (talk | contribs)
Jump to navigationJump to search

Template:Parameters/ja

4B - 引数 (著者: Tao Yue, 状態: 原文のまま修正なし)

引数リスト(parameter list)は手続きのヘッディングの部分として含まれる。引数リストは変数値をメインのプログラムから手続きへと引き渡すことを可能にする。新しい手続きのヘッディングは次のようになる。

手続き名 (形式引数リスト);

引数リストが複数の引数グループから成っているときは、セミコロンで区切る。

引数グループ1; 引数グループ2; ... ; 引数グループn

各引数グループは以下の形式をとる。

識別子1, 識別子2, ... , 識別子n : data_type

手続きは形式引数リストと同じ数で同じタイプのアーギュメントを受け渡すことで呼び出される。

procedure Name (a, b : integer; c, d : real);
begin
  a := 10;
  b := 2;
  writeln (a, b, c, d)
end;

上記の手続きをメインのプログラムから、以下のように呼んだとしよう。

alpha := 30;
Name (alpha, 3, 4, 5);

When you return to the main program, what is the value of alpha? 30. Yet, alpha was passed to a, which was assigned a value of 10. What actually happened was that a and alpha are totally distinct. The value in the main program was not affected by what happened in the procedure.

This is called call-by-value. This passes the value of a variable to a procedure.

Another way of passing parameters is call-by-reference. This creates a link between the formal parameter and the actual parameter. When the formal parameter is modified in the procedure, the actual parameter is likewise modified. Call-by-reference is activated by preceding the parameter group with a VAR:

VAR identifier1, identifier2, ..., identifiern : datatype;

In this case, constants and literals are not allowed to be used as actual parameters because they might be changed in the procedure.

Here's an example which mixes call-by-value and call-by-reference:

procedure Name (a, b : integer; VAR c, d : integer);
begin
  c := 3;
  a := 5
end;

begin
  alpha := 1;
  gamma := 50;
  delta := 30;
  Name (alpha, 2, gamma, delta);
end.

Immediately after the procedure has been run, gamma has the value 3 because c was a reference parameter, but alpha still is 1 because a was a value parameter.

This is a bit confusing. Think of call-by-value as copying a variable, then giving the copy to the procedure. The procedure works on the copy and discards it when it is done. The original variable is unchanged.

Call-by-reference is giving the actual variable to the procedure. The procedure works directly on the variable and returns it to the main program.

In other words, call-by-value is one-way data transfer: main program to procedure. Call-by-reference goes both ways.

previous contents next