この章ではメソッドについて説明します。
メソッドとは引数と言うデータを受け取って、ある一定の処理を行い、戻り値を呼び出し元に返す命令のことを言います。
引数とはメソッドを実行するときにメソッドが使うデータのことを言います。戻り値とは、メソッドを実行した結果、返される値です。
簡単に言いますと「このデータ(これは引数に相当します)を渡すので、この作業をやってくださいね」と命令するとメソッドという機械が作業をしてくれて、その結果(戻り値)を返してくれるというのが一連メソッドの流れです。
例えば「消費税を自動で計算するメソッド」を自分で作りたいとします。
その場合、商品の代金をメソッドに渡すと商品金額に税率を掛けた処理をして、その結果を返すというメソッドを作ることになります。
このような一連の処理を作ることをメソッドを定義すると言います。
通常メソッドはクラス(クラスについては「クラスについて知ろう」で説明します)の中に書きますが、クラスの中ではなくても書くことが出来ます。
クラスの中ではない位置はトップレベルと呼ばれています。これまでの学習ではまだクラスの説明をしていないので、すべてトップレベルで記述してきました。
ここではクラスの中のメソッドではなく、トップレベルでのメソッドの記述方法について説明します。
〇このメソッドの構文の中にある引数を仮引数と言います。
先ほどの書きましたが引数とはメソッドの中で使われるデータのことです。
引数1を第1引数、引数2を第2引数と言いますが、引数の数はメソッドにより変わります。
〇メソッド名の付け方は基本的には変数の命名規則と同じですが、変数と違って大文字のアルファベットも可能です。
〇引数が複数ある場合はカンマで区切りますが、引数が必要ないメソッドであるならば引数は省略することができます。
実はメソッドは定義しただけでは機能しません。
メソッドを実行するためにはメソッドを呼び出さなくてはいけません。
今のところはクラスの説明をしていないので、この章ではトップレベルにメソッドが書かれていた場合でのメソッドの呼び出し方について説明します。
〇メソッドの呼び出しの中にある引数を実引数と言います。
〇引数が複数ある場合はカンマで区切りますが、引数が必要ないメソッドであるならば引数は省略することが出来ます。
では例をみてみましょう。
=>このメソッドは足し算を行うと言う機能を持っています。
このメソッドの中にある引数a,bはこのメソッドが実行されている間だけ有効な引数なので関数の外で出力することは出来ません。これをローカル変数と言います。
このメソッドを呼び出している箇所が
です。
つまり、
という形式でメソッドを呼び出します。
この引数の2はメソッドの中の引数aにセットされ、3はメソッドの中の引数bにセットされます。
そして、このメソッドを実行した結果を
の箇所で出力しています。
この例の結果は5が出力されます。
ここで注意してほしいことはメソッドの呼び出しよりも、メソッドの定義を後に書かないでください。
つまり、以下の例はエラーになります。
次は仮引数にあらかじめ初期値を設定する方法について説明します。
初期値を設定するすると、メソッドの呼び出しの際に実引数を設定する必要はありません。
では例をみてみましょう。
実引数が
のようにカラですのでメソッドの仮引数が使われます。
つまり、aが2、bが3と、仮引数が設定してありますので、この値が使われます。
このように仮引数に値が設定してあれば実引数を省略することが出来ます。
結果は5が出力されます。
仮引数に初期値を設定した場合でも、実引数を設定しても問題ありません。
その場合は実引数が使われます。
では例をみてみましょう。
実引数と仮引数の両方に引数の値を設定していますが、実引数の5と8が優先されますので、結果は13です。
次の例は仮引数を2つ設定して、実引数を1つしか設定しなかった場合はどうなるか見てみます。
この場合は仮引数aに8が代入されるので、仮引数 aの2は使われません。
bはそのまま3が使われます。
結果は11です。
次は実引数と仮引数の数が合わない場合の例です。
実引数が3つで、仮引数が2つなので、実引数が1つ多いです。
結果は次の通りエラーです。
意味は引数の数が間違っていますと書かれています。
次は仮引数を設定する場合の注意点について説明します。
では例をみてみましょう。
仮引数の設定値はすべてを設定する必要はなく、例えば例のように2つの引数の中の1つだけを設定することも出来ます。
しかし、メソッド内の引数の設定は右端からしてください。
つまり
のように、第1引数(先頭の引数)だけを設定して、後の引数を設定しないという形式は取ることができません。
次は実引数に変数を使った例について説明します。
のように実引数に変数を使用することも出来ます。
次はメソッドに配列を渡す方法について説明します。
では例をみてみましょう。
では説明をしていきます。
そして、計算の後にその結果を呼び出し元の
に戻します。
このようにメソッドの実行結果をメソッドの呼び出し側に返すにはreturnを使います。
具体的には
と言う形式で書きます。
例では
の箇所です。
結果は「答えは530」です。
この例の流れを図にしましたので参考にしてください。
次の例もメソッドに配列を渡しているのですが、前の例とは違う形態で渡します。
では例をみてみましょう。
前の例では配列をメソッドに渡した後に、その配列から要素を取り出すためにfor文を使っていましたが、この例ではメソッドに引数を渡すときに実引数の先頭に「*」を付けて、仮引数で個別に要素を受け取ります。
配列である実引数の先頭に「*」を付けると仮引数では配列の要素が分解されて渡されます。
メソッド側には配列の要素の数だけ仮引数を用意してください。
2は仮引数aに入り、3は仮引数bに入り、8は仮引数 cに入ります。
結果は「答えは13」です。
前の例では実引数の先頭に「*」を付けましたが、今度は仮引数にも「*」を付ける例を紹介します。
実引数の配列名の前に「*」を付けるまでは前の例と同じですが、仮引数にも「*」を使用します。
仮引数の変数aには
が入り、残りの要素は
に配列として入ります。
配列の実引数に「*」を付けて渡して、仮引数では「普通の変数と「*」を付けた変数」で受け取ると配列の要素を分けて代入することができます。
その後、配列の要素をfor文で処理しています。
結果をreturnで返しているのですが、この例の場合は2つの変数を
のように返しています。
複数の変数を返す時にはカンマで区切って記述してください。
その戻り値をどのように受け取るかと言いますと、
という形式で受け取ります。
この方法は複数の値を一度で受け取ることができます。これを多重代入と言います。
この例では以下の箇所です。
多重代入についてもう少し例を出して説明します。
では以下の場合にはどうでしょうか。
では次の例をみてみましょう。
では次の例をみてみましょう。
次の例はメソッドの中でヒアドキュメントを使った例です。
この例は与えた実引数の値をヒアドキュメントで出力しています。
結果は以下の通りです。