30分でわかる(かも知れない)Scala超々入門! (7/8)
作成:2013-01-10 08:26
更新:2013-01-10 08:26
更新:2013-01-10 08:26
■引数の扱い・メソッドの関数オブジェクト化
メソッドや関数については、、この他、覚えておくと便利な機能がいくつかあります。最後にそれらを補足的にまとめておきましょう。
●引数の名前指定
複数の引数があるとき、それぞれの引数に名前をつけておくことができます。例えば以下のように定義されたメソッドがあったとしましょう。
●引数の初期値指定
メソッドや関数を呼び出すとき、引数が揃っていないとうまく呼び出せません。が、引数にあらかじめ初期値を与えておくことで、その引数を省略して呼び出せるようになります。これは、
●メソッドを関数オブジェクトとして取り出す
defで定義するメソッドは、それ自体は関数オブジェクトではありません。が、「メソッドとして用意しておいたけど、関数オブジェクトとして利用したい」というときにはどうすればいいのでしょう。これは、ちゃんとやり方があります。
●引数の名前指定
複数の引数があるとき、それぞれの引数に名前をつけておくことができます。例えば以下のように定義されたメソッドがあったとしましょう。
def func (a:Int, b:Int)これを呼び出すときに、 func(a = 1, b = 2) というように、名前を指定して値を記述することができるのです。こうすると、引数の順番などが間違っていても確実に指定の引数に値を渡すことができます。
●引数の初期値指定
メソッドや関数を呼び出すとき、引数が揃っていないとうまく呼び出せません。が、引数にあらかじめ初期値を与えておくことで、その引数を省略して呼び出せるようになります。これは、
def func(a:Int = 100, b:Int = 200)例えばこんな具合に、引数の変数(仮引数)に値を代入する形で記述をします。こうすることで、メソッドを呼び出した時、その引数の値が要されていなければ、ここで指定された初期値が自動的に代入されるようになります。
●メソッドを関数オブジェクトとして取り出す
defで定義するメソッドは、それ自体は関数オブジェクトではありません。が、「メソッドとして用意しておいたけど、関数オブジェクトとして利用したい」というときにはどうすればいいのでしょう。これは、ちゃんとやり方があります。
import java.util._ここでは、mainメソッドで、totalメソッドを関数オブジェクトとして定数funcに代入し利用しています。この部分を見ると、こんな具合に書かれていますね。
object myapp {
def main(args: Array[String]) = {
val rnd = new Random
val n = rnd.nextInt(100)
val func = total _
println(n + "までの合計:" + func(n))
}
def total(num: Int) = {
var res:Int = 0
for(n:Int <- Range(1,num + 1))
res += n
res
}
}
val func = total _このように、メソッド名の後にアンダースコアを付けて記述することで、そのメソッドを関数オブジェクトとして取り出すことができます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ