2020年01月16日

師匠のVB.NETどたばた塾~第5回

sisyo.gif
師匠T:さて、今回はいきなり謝らねばならぬことがある。

deshi.gif
弟子D:

sisyo.gif
今回は『クラスについて話す』と予告しておいたが、その前に、VB.NETのプログラミングに置いて欠かせぬ要素『関数とサブルーチン』について話すのを忘れておった。なので、クラスについては次回に回し、今回はその関数とサブプロシージャについて説明することとする。了承していただきたい、すまぬ。

deshi.gif
師匠が謝るなんて珍しい。

sisyo.gif
おぬしも一度、謝ってみるか?

deshi.gif
謹んでご遠慮申し上げます。

sisyo.gif
……。
こほん、それでは始めていくとしようぞ。

【まずは概要からじゃ!】

sisyo.gif
まずは、サブルーチンからじゃな。とはいっても、関数もサブルーチンも基本は同じ。特定の処理をまとめたものじゃ。例えば、VB.NETに基本で備わっているVal関数は、文字を数値に変換するための処理をまとめたもの、という具合じゃな。

deshi.gif
確か、値(戻り値)が返されるものが関数、でしたっけ。

sisyo.gif
うむ。その通りじゃ。対して、戻り値が返されぬものをサブルーチンと区別しておる。そしてそれらを総称して、プロシージャと呼ぶのが一般的じゃ。
詳しくは、以下の図を見るべし。

プロシージャ-+--関数(戻り値が返されるもの)
       |
       +--サブルーチン(戻り値が返されないもの)

deshi.gif
ふむふむ。

sisyo.gif
そして、このプロシージャを使うことによって、メインの処理をすっきりさせることができる。だらだらと処理を書き連ねるより、その関数やサブルーチンの名前だけを書けば済むことを想えば、一目瞭然じゃろ?

deshi.gif
そうですね。

sisyo.gif
そして、プロシージャの利点はそれだけではないぞ。汎用性のあるプロシージャを一つ作っておけば、それをプログラムのあちこちで使いまわすことができる。これは、プログラミングをするうえで、大いに助けになるであろう。

deshi.gif
はい。

sisyo.gif
それでは、いよいよプロシージャの作り方、使い方についてレクチャーしていくぞ!

【サブルーチンを作るのじゃ!】

sisyo.gif
さて。まずはサブルーチンの作り方について説明していくぞ。といっても簡単。

[Public] Sub サブルーチン名([引数1 As 引数1の型, ……])

End Sub

sisyo.gif
このSub~とEnd Subの間に、目的の処理を書けばいいだけじゃ。なお、[ ]で囲まれている部分は、省略できることを表しているぞ。例としてはこんなところじゃ。

Sub Sisyo1(A As Integer)
End Sub
-----
Sub Sisyo2()
End Sub

deshi.gif
引数というのは、確か呼び出し先から渡された数が入る変数みたいなもののことですよね。

sisyo.gif
うむ。その通り。例えば……

Sub Sisyo3(hiki1 As Integer)
End Sub

sisyo.gif
というサブルーチンがあったとして……

Sisyo3(5)

sisyo.gif
呼び出し元のほうで上のように呼んでやると、hiki1に5が入る、というわけじゃ。なお、引数を入れる変数として宣言したものは、Dim文で宣言することはできぬ。ここには気を付けること。

deshi.gif
はい。それで、頭にPublicとつけることができるようですが、これをつけるとどうなるのですか?

sisyo.gif
うむ。これをつけると、そのサブルーチンは、そのプロジェクト(プログラム全体のようなものと思うがよい)のどこからでも呼び出すことができるようになるのじゃ。

deshi.gif
ふむふむ。

sisyo.gif
今回は、Module1という一つのソースファイル内で完結しておるから、Publicを使う機会はあまりないが、この先、複数のソースファイルで構成されるプログラムを組むさいには必要になってくる。覚えておくようにな。

deshi.gif
はい!

sisyo.gif
なお、引数についてじゃが、複数の引数がある場合は、『引数名 As 引数の型』をコンマで区切る。こんなようにの。

Sub Sisyo4(hiki1 As Integer, hiki2 As Integer)

deshi.gif
ふむふむ。

sisyo.gif
また、引数の指定にはちょっと難しい使い方がある。それがOptionalじゃ。

deshi.gif
おぷしょなる?

sisyo.gif
うむ。Optionalをつけた引数は、省略することができるようになるのじゃ。Optionalを使う時は、このように書く。

Optional 引数名 As 引数の型=初期値
例:Sub Sisyo4a(Optional hiki1 As Integer=0)

sisyo.gif
例の場合、引数を渡さずに呼び出した場合は、hiki1には0が入るのじゃ。

deshi.gif
なるほど、これは便利ですね!

sisyo.gif
そうじゃろう。さて、呼び方だが、とても簡単。こう書けばいいだけじゃ。

サブルーチン名([引数1, ~])

例:
Sisyo5()
Sisyo6(5)
Sisyo7(4, 2)

sisyo.gif
こちらも、引数が複数ある場合は、コンマで区切って書く。また、引数を必要としないサブルーチンの場合は引数を書かなくてよい、というか書いてはならぬ。無理に書くと、ビルドエラーが起こるので気を付けるようにの。

deshi.gif
はい!

sisyo.gif
では次は、関数について説明していくことにするぞ!

【関数を作るぜ!】

sisyo.gif
さて、関数とはプロシージャの中でも、呼び出し元に値を返すものだと話したな。

deshi.gif
はい!

sisyo.gif
では、それを踏まえたうえで、関数の宣言について教えよう。これじゃ!

[Public] Function 関数名([引数1 As 引数1の型, ……]) As 戻り値の型

End Function

sisyo.gif
Publicや引数については、サブルーチンと同じだから、ここでは割愛するぞ。

deshi.gif
Subではなく、Functionを使うところと、戻り値の型をつけるところがサブルーチンと違うんですね。

sisyo.gif
うむ、その通り。さて、戻り値の返し方だが、二つの方法がある。まず一つは、このように書くこと。

関数名=戻り値
例:Sisyo8=5

sisyo.gif
そしてもう一つは、Return文を使うことじゃ。

Return 戻り値
例:Return 5

sisyo.gif
ここで注意点を一つ。先の引数の注意点と同じく、関数の中では、関数と同じ変数をDim文で宣言することはできぬ。宣言しようとするとビルドエラーが出るので気を付けることじゃ。

deshi.gif
はい。

sisyo.gif
さて使い方じゃが、このように作られた関数は、VB.NETに標準で供えられておる関数と同じように使うことができる。つまり、ただ変数に入れるだけではなく、式の一部として使ったり、表示させたりできるわけじゃな。

例:
a = Sisyo9(5, 2)
b = Sisyo10(1000, 0.3) + 1000
Console.WriteLine(Str(Sisyo11(4, 2))

deshi.gif
なるほど、わかりました、師匠。

sisyo.gif
プロシージャをうまく使えば、プログラミングがとても楽になる。精進することじゃ。
さて、次回は改めて、クラスについて説明していく。予習、復習を忘れてはならぬぞ!

deshi.gif
でも、師匠が学生時代のころは……?

sisyo.gif
はあっ!!(飛び蹴り

==========
※次の更新は、『師匠TのチャレンジARSゲーム!』の予定です。お楽しみに!

posted by 裏編 at 12:43| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする