Difference between revisions of "Basic Pascal Tutorial/Chapter 4/Parameters/ja"

From Free Pascal wiki
Jump to navigationJump to search
Line 14: Line 14:
 
  識別子1, 識別子2, ... , 識別子n : データ型
 
  識別子1, 識別子2, ... , 識別子n : データ型
  
手続きは形式引数リストと同じ数で同じタイプのアーギュメントを受け渡すことで呼び出される。
+
手続きは仮引数リストと同じ数で同じタイプのアーギュメントを受け渡すことで呼び出される。
 
<syntaxhighlight>
 
<syntaxhighlight>
 
procedure Name (a, b : integer; c, d : real);
 
procedure Name (a, b : integer; c, d : real);

Revision as of 08:31, 19 August 2015

Template:Parameters/ja

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

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

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

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

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

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

識別子1, 識別子2, ... , 識別子n : データ型

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

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);

メインのプログラムに戻ったとき、alpha の値は何だろう? 答えは30。だが、alpha は a に渡され、それには10が割り当てられていたはずである。実際には a と alpha は完全に区別される。メインのプログラムでの値は手続きで起きたことには影響されないのである。

これは値渡し(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