libro
www.tuyano.com
初心者のためのSwiftプログラミング入門

関数リテラルとクロージャ (3/4)

作成:2014-10-25 09:24
更新:2014-10-25 09:24

■いよいよクロージャ登場!

さあ、この「値としての関数」の基本がわかったところで、いよいよSwiftの目玉機能である「クロージャ」を使ってみることにしましょう。

クロージャというのは、「値としての関数を引数に指定して別の関数に渡して利用する」という仕組みのことです。関数は値なんですから、関数そのものを引数に指定した関数だって作れるんです。

こうして、関数という処理そのものを引数に指定して別の関数に渡したりする機能がクロージャです。

これは、実物を見ないとなんだかよくわからないでしょう。ということで下のリスト欄に簡単な利用例をあげておきました。

ここでは、calcprintResultという2つの関数を定義してあります。calcは、先程までのサンプルと同じで、ゼロから引数の値までの合計を計算して返すシンプルなものです。クロージャを利用しているのは、printResultです。

このprintResultでは、関数とInt値が引数に渡されます。関数は、型として (num:Int)->Int というものが指定されていますね。これで、calc関数を引数に渡して呼び出せば、内部でその関数を実行して結果が出力される、というわけです。

このprintResultは、単に「calcの結果を出力する」というものではありません。引数に渡すのは、calcでなくてもいいのです。Int値を引数に渡してInt値を返す関数ならば、何でも渡して利用することができます。

つまり、クロージャを使うことで、「処理を外部に切り離せる」という利点があるのです。これがクロージャを利用する大きな利点でしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

func calc(num:Int)->Int {
    var res = 0
    for n in 0...num {
        res += n
    }
    return res
}

func printResult(function:(num:Int)->Int, n:Int) {
    println(function(num: n))
}

printResult(calc, 123)

※関連コンテンツ

「初心者のためのSwiftプログラミング入門」に戻る