関数は、"func 関数名(引数リスト)->戻り値型{...}"で定義する。引数リストは、"変数名:型"をカンマ区切りで指定する。
func plus(num1:Int, num2:Int) -> Int {
return num1 + num2
}
println("1+1=\(plus(1,1))") // "1+1=2"と表示
可変引数は、"nums:Int..."のように指定する。numsは配列になっていて次のように引数を扱える。
func printNums(nums:Int...)->Void {
for num in nums {
println(num)
}
}
printNums(1,2,3,4,5)
// 1
// 2
// 3
// 4
// 5
// って表示される
関数はファーストクラスオブジェクトで数値と同じように関数の戻り値や引数に指定できる。
// plus関数を返す関数を定義
func makePlus()->((Int, Int)->Int) {
func plus(num1:Int, num2:Int)->Int {
return num1 + num2
}
return plus // 関数を返す。
}
var plus = makePlus()
println("1+1=\(plus(1,1))") // "1+1=2"と表示
関数に引数で関数をわたす例
func plus(num1:Int, num2:Int)->Int {
return num1 + num2
}
func reduce(nums:[Int], calc:((Int,Int)->Int))->Int? {
if nums.count == 0 {
return nil
}
var ret = nums[0]
for var i = 1; i < nums.count; i++ {
ret = calc(ret, nums[i])
}
return ret
}
var sumOpt = reduce([1,2,3,4,5,6,7,8,9,10], plus)
if let sum = sumOpt {
println("1~10の合計:\(sum)") // "1~10の合計:55"と表示
} else {
println("エラー")
}
そーいや、↑で使ったがOptional型についてまだ書いてないな。