【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が出力され、先ほどと同じ処理であることがわかりますね。

このように、関数とクロージャはできることはあまり変わりませんが、クロージャを使った方が処理を短くすることができます。