【Swift入門】関数とクロージャの違い
この記事の目次
関数とクロージャの違いとは
関数とクロージャの違いが少しわかりにくいので、説明しておきましょう。
関数とクロージャでは、できることはあまり変わりません。
しかし、クロージャを使えば記述を短くできる時があるので、そのような時は楽ができます。
また、短くなると楽ができるだけでなく、コードの可読性の観点からみても良いかと思います。
例えば、mapという関数があります。
mapを使えば、配列に好きな処理を加えて、新しい配列を作ることができます。
mapは引数に関数やクロージャを取ることができる高階関数と呼ばれる関数です。
mapの引数に関数を使った場合と、クロージャを使った場合の二つを見比べてみると、クロージャを使った場合、どれだけ短くなるのかわかりやすいと思うので、実際に使ってみようと思います。
今回は、0~5までの数値が含まれた配列を作って、mapを使って、それらの値全てに10を加算した配列を新しく作ってみようと思います。
関数を使った場合
まずは関数を使った場合です。
var numbers = [1, 2, 3, 4, 5] var addTenNumber = numbers.map(addTen) func addTen(number : Int) -> Int { return number + 10 } print(addTenNumber) |
と記述します。
簡単にコードについて説明しておきましょう。
このコードは1~5までの数値が格納されたnumbersという配列に
map関数を使って、処理を加えた新しい配列を作り、
addTenNumberという変数に格納するという内容です。
mapの引数にはaddTenを指定していて、
addTenは引数に10を加えるという関数です。
なのでaddTenNumberにはnumberに10加算された11~15までの数値が格納されます。
コードの最後にはprintを使っているので、実行してみると、確かに11 ~ 15までの数値が格納されていますね。
このコードでも問題なく、やりたい処理はできるのですが、map関数のためだけにaddTenという一度しか使わない関数を定義するのは、面倒ですね。
クロージャを使った場合
次にクロージャの省略形を使ってコードを記述してみましょう。
var numbers = [1, 2, 3, 4, 5] var addTenNumber = numbers.map { $0 + 10 } print(addTenNumber) |
と記述します。
関数を使った時と比較すると、だいぶ短くなっていますね。
本当に同じ処理であるのか確認するために、念の為実行しておくと、11 ~ 15が出力され、先ほどと同じ処理であることがわかりますね。
このように、関数とクロージャはできることはあまり変わりませんが、クロージャを使った方が処理を短くすることができます。