LoginSignup
1
1

More than 3 years have passed since last update.

クロージャー を理解をしよう!

Last updated at Posted at 2020-10-26

今回は、クロージャー について学習したので、アウトプットしていきます
※以下の内容は、学習内容のアウトプット用のため、誤りがある場合があります。予めご了承ください

クロージャーとは?

クロージャー とは、再利用可能なひとまとまりの処理のことをいいます。
関数はクロージャーの1種であるため、共通の使用が数多くあります。
関数を使用するには、「func」キーワードによる定義が必要でしたが、クロージャーはクロージャー 式という定義方法があります。

関数について復習したい方はこちら!!
関数を理解しよう!( https://qiita.com/syunta061689/items/77e8aa76070a734f1b4d

基本的な定義の方法は以下の通りです。

qiita.rbvar
{(引数名1 , 引数名2 ...) -> 戻り値の型 in 
  クロージャーの実行時に実行される文 
  必要に応じてreturn文で戻り値を返却する
}

次に簡単な例を見ていきましょう。

qiita.rbvar
let double = {(x:Int) -> Int in

return x * 5

}
double(5) //25

引数と戻り値の型の記述は関数と同様ですが、戻り値の型と文はinキーワードで区切ります。
上記の例では、Int型の引数を1つ取り、それを5倍にしたInt型の戻り値を返すクロージャーを定義して実行しています。

クロージャーとしての関数

qiita.rbvar
func rectangleArea(height:Int,width:Int) -> Int {
 let result = height*width
 return result //計算結果を戻す

}

let area = rectangleArea(height: 5,width: 6) //30

上記の例では、変数の型はInt -> Intと明確に決まっており、計算結果のresult returnを実行し,戻り値を返却しています。

クロージャー としてのArray型

次は、配列または、辞書を返すよう:にするパターンです。

Array型について復習したい方はこちら!!
Array型を理解しよう!(https://qiita.com/syunta061689/items/89e549f4a3254f635ce1

簡単な例を見ていきましょう。

qiita.rbvar
func a(num: [Int] -> [Int] { // Int型な配列を返します
    print num
}

func b(strings: [String: Int]) -> [String: Int]{ // キーがString型、値がInt型な辞書を受け取れるようにします。
    print strings
}

let test = a(num:0,1,2) 
let test1 = b(String:[チンパンジー:0,ゴリラ:1]) 

print(a)//[0,1,2]
print(b) //[チンパンジー:0,ゴリラ:1]

最後に

今回は、クロージャーについての基礎をまとめました。しかし、今回記述した内容は基礎中の基礎で、クロージャーは奥深く、複雑な書き方があるのでそこの理解もしっかり今後も行っています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1