こんにちわ
今回はswiftでクロージャーについて学んだので、備忘録としてこの記事に載せていこうと思います!
#クロージャーとは
クロージャーとは、文の中に直接埋め込む命令の塊を作ることができる機能です。
基本の形は以下の通りです。
exapmle.swift
//基本的な形
{(引数名: 型) -> 戻り値の型 in
文
}
//実際例1
var Triangle = {(length: Int) -> Int in
return length * length / 2
}
Triangle(4) //8
//実際例2
var Square = {(length: Int) -> Int in
var width = length
return width * 5
}
Square(4)//20
このように使うことができます。
また、一文の場合はreturnを省略することもできます。
example.swift
//returnの省略
var Square = {(length: Int) -> Int in
length * length
}
Square(4)//16
##クロージャーのメリットとは
私はクロージャーを学び始めたてなのでそんなに詳しくはないのですが。
コードが見やすくなることが1番のメリットだと考えました。
まず関数を使った処理を見ていきましょう。
example.swift
//関数を使った場合
func Calculation(NumOne:Int, NumTwo: Int, SumNumber:(Int,Int) -> Int) -> Int{
return SumNumber(NumOne,NumTwo)
}
func add(NumOne:Int,NumTwo:Int) -> Int {
return NumOne + NumTwo
}
print(Calculation(NumOne:3, NumTwo:4, SumNumber:add))
これにクロージャーを使うと以下のようになります。
exapmle.swift
func Calculation(NumOne:Int, NumTwo: Int, SumNumber:(Int,Int) -> Int) -> Int{
return SumNumber(NumOne,NumTwo)
}
print(Calculation(NumOne:3, NumTwo:4, SumNumber:{(a:Int,b:Int) -> Int in a+b}))
また、型を省略することができます。
example.swift
func Calculation(NumOne:Int, NumTwo: Int, SumNumber:(Int,Int) -> Int) -> Int{
return SumNumber(NumOne,NumTwo)
}
print(Calculation(NumOne:3, NumTwo:4, SumNumber:{(a,b) in a+b}))
こっちの方がスッキリしてるかもですね。
#トレイリングクロージャーとは
トレイリングクロージャーは、関数の最後の引数がクロージャーの場合、カッコの外にクロージャーを記述することができる方法です。
以下のコードを見てください。
example.swift
func NamePrint(name: String, closure: (String)->Void) {
closure("私は\(name)です")
}
//トレイリングクロージャーなし
NamePrint(name:"naoki",closure:{ string in print(string) })
//トレイリングクロージャーあり
NamePrint(name:"naoki") { string in print(string)}
メリットとしては、コードの可読性が上がり、見やすくなる事です。
#まとめ
クロージャーはコードの可読性を上げるために使う。。。。。