第5講 プロシージャ(1)
第10話 引き数名が異なっていてもよい理由
第7話コード再掲
Module Module1
Sub Main() '私は社長だ。
Dim s, k, m, y As Integer 's:初項 k:交差 m:末項 y:受け皿
Console.WriteLine ("キーボードから初項,交差,末項の順に入力して下さい。")
Console.Write ("初項=")
s = Console.ReadLine()
Console.Write ("交差=")
k = Console.ReadLine()
Console.Write ("末項=")
m = Console.ReadLine()
y = f(s, k, m)
Console.WriteLine("初項{0:d},交差{1:d},末項{2:d}の等差数列の和={3:d}", s, k, m, y)
End Sub
Function f(s As Integer, k As Integer, m As Integer) 's:初項 k:交差 m:末項
Dim i, w As Integer 'iはFor文の制御変数 wは和を積算する整数
w = 0 '0に初期化
For i = s To m Step k
w += i
Next
Return w
End Function
End Module
まず、同じ箱の名前ですが、
sとsは別の箱であることはおわかりですよね。
sは社長Main()専用の箱です。
それに対して、sは社員f()の専用の箱です。
sという箱は社長室にあり、sという箱は社員が属している部の部屋にあって別の箱です。
箱にマジックで書いた箱の名前がたまたま同じであるだけだと解釈すればよいのです。
そして、sとsも違いましたね。
sは箱そのものですし、sは箱の中に入っている数値です。
もし、Console.ReadLine()でsに5を代入したとすれば、sは5そのものです。
渡しているのは、あくまで箱の中身の値です。
値を受け取るために、社員f()も受け箱として箱sを用意しただけで、
実際に使うときには、箱そのものを使うのではなくて、
箱の中身を使います。
ですから、今の例ではsは5です。
箱なのか箱の中身なのかをちゃんと区別しなければなりません。
引き数名が異なっている理由をはっきり答えましょう。
社員f()が用意するのは、引き渡される値を受け取る私書箱=受け箱にすぎないからです。
その私書箱をどのような名称にしようとそれは社員f()の自由です。
自分の受け箱をsと呼ぼうが、xと呼ぼうが関係ありません。
値つまり中身を受け取る受け箱にすぎないのですから。
さて、以上でプロシージャ(1)は終了しますが、
プロシージャについてはまだまだ説明しなければならないことがたくさんありますので、
プロシージャ(2)で再びプロシージャに戻ってきます。
第6講では配列、第7講で多次元配列と1次元配列の関係を学んだ後に、
第8講でプロシージャに戻ります。