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

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

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

■関数の「型」はどう記述する?

関数が値ということは、もちろん、それぞれの関数にも「」があるはずですね。先ほど、変数に関数の値を代入した時には、型の指定はしていませんでした。では、きちんと型を指定して記述した場合はどうなるでしょうか。

下に、先のサンプルを書き換えたリストを掲載しておきます。ここでは、まず関数(とりあえずdummyFuncって名前にしてますが、この名前では使わないので何でもいいです)を変数calcに代入し、これをまた変数f1に代入して呼び出す、ということをやっていますね。

ここでの変数の型宣言を見るとこうなっています。
var 変数:(num:Int)->Int = func 関数:(num:Int)->Int {……}

見ればわかるように、関数名より後の部分(引数と返値の指定の部分)がまるごと「型」として指定されています。こんな具合にして、関数の型は指定されるんですね。

型としては長ったらしくてわかりにくいですが、「関数の方は、引数から返値までの部分をまるごと書いて指定する」と覚えておけばそう難しくはありません。

ここでちょっと注意して欲しいのが、この関数を呼び出している部分です。f1(10)ではなく、f1(num:10)となっていますね?

型をきっちり指定して変数を用意した場合、このように引数名などまできっちり指定して呼び出さないといけないようです。型推論で変数に代入した場合と微妙に動作が異なるので注意してください。

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

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

●プログラム・リスト●

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

var f1:(num:Int)->Int = calc

println(f1(num: 10))
※関連コンテンツ

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