目的
クロージャを用いることで、変数や定数の初期化(定義)を把握しやすいようにします。
ここで言う把握しやすいというのは何回も記述する冗長な変数や定数の初期化コードをアルゴリズムで定義して、可読性の向上や変更点の削減を図ろうという事です。
サンプルコード
1 各マスの値を直接定義
//定義
var board = [[1,1,1],[1,1,1],[1,1,1]]
//実行
board
//結果
[[1,1,1],[1,1,1],[1,1,1]]
変数boardに対して、配列を直接代入する事で実行します。
このままでは数値を変更する際に一つずつ、値を変更しなければいけません。
2 マスの値を変更できるように定義
//定義
var board = Array(repeating: Array(repeating: 1, count:3), count:3)
//実行
borard
//結果
[[1,1,1],[1,1,1],[1,1,1]]
上記のコードではrepeatingで繰り返す値を定義して、countで繰り返す回数を定義します。
そのため内側のArray配列で[1,1,1]を一つ作り、それを外側のArray配列で三回繰り返している形になります。
3 より見やすく
//定義
var board: [[Int]] = {
let sideLength = 3
let row = Array(repeating: 1, count: sideLength)
let board = Array(repeating: row, count: sideLength)
return board
}()
//実行
board
//結果
[[1,1,1],[1,1,1],[1,1,1]]
以上のコードは前回まで入れ子になっていた配列をletとboardの定数に分けて定義する事で、見やすくなりました。
クロージャを使用すると、このように一連の初期化の手続きの実装を1つの式とすることができます。