2016年5月21日土曜日

[C#] メソッド(関数)とvoid型

こんにちは。明月です。
今日はC#のメソッドに関して勉強します。メソッドあるいは関数と呼ばれる機能は数学の関数(function)と同じ意味です。すなわち、関数に任意の数を入れると関数の式によって計算をされる数の値がでることになります。



それなら、プログラムの関数の使用方法は下記のとおりです。




上の例で「static」のキーワードはとりあえず無視しましょう。例を説明すると「ExamMethod」、「ExamMethod」の関数があります。「ExamMethod」の場合は「10」のデータを入れると「10」倍になって「100」の値が返却すると思います。
「ExamMethod2」の場合は「10」、「20」のデータを入れると2つのデータが足すので「30」のデータが返却すると思いますね。



メソッド(関数)は上の形態が基本ですが返却値が1つではなく2つ以上になるあるいはパラメタの個数が動的になる場合もあります。




上の関数の場合はパラメタ「b」は「a」の値の商、「c」には「a」の値の余のデータが返却し、メソッド(関数)は余が「0」の場合は「true」、その以外は「false」を返却します。



パラメタ個数が可変の場合は下記とおりです。




上の例はパラメタで受け取ったデータをすべて合計する関数です。



void


今まで我々は関数の返却値があるように作成しました。でも逆に返却値が必要ではない場合もありますね。例えも上の返却値が2つ以上の例を見ると関数返却値は余が「0」かどうかの値を返却しました。
でも、「0」かどうかの値は要らずに商と余だけ返却したい時があると思いますね。その場合は返却値に「void」のキーワードを書いて「返却をしない」というを明示します。




今までメソッド(関数)の方法にかんして勉強しました。メソッド(関数)のことは数学のファンクションみたいに結果値に置換ができます。それなら数学の数列という数の並びがあります。
たとえば「1」から「10」の合計はどうすればいうと数式に変換すると「1+2+3+4+5+6+7+8+9+10」になります。「10」の「1」を足すの等差数列を分析すると「9」の「1」を足すの等差数列+「10」に表現ができますね。
すなわち「n」の「1」を足すの等差数列は(n-1)の「1」を足すの等差数列に表現ができます。
そのとおりに「1」の等差数列は「1」になりますね。それをプログラムで実装すると下記とおりです。




上の例を見ると「SumList」の関数の中で「SumList」を呼び出しています。そのように自分が自分を呼び出すことをプログラムには「再帰関数」と呼びます。
でも実際にプログラムを作る時に再帰関数はよく使えません。性能問題もあるしStackOverflowが発生する可能性があるからです。できれば「for」文で実装できれば、「for」文のほうで作成するほうが良いと思います。
逆に再帰関数はアルゴリズム的に使う場合があるので、状況をみてループがよいか再帰関数がよいかを判断して使ってください。



0 件のコメント