[Swift]mapについて

ArrayやばいOptionalにはmapというメソッドが実装されている。これは中身に対して関数適用するというものです。for文で「やればいいじゃないの?」といわれたのでその差を解説する。

 例えばArrayからArrayに変換したい場合、Arrayに注目するかStringとIntに注目するかによる差だである。Arrayに注目する場合、新しい入れるを作ってそこに変換結果を追加していくと考えた場合、for文を使うことになる。一方、StringからIntに変換した結果として新しいArrayが出来上がると考えた場合、mapを使う。現在、どちらの考え方が良いというのはないが、多くの言語でmapが実装されている。

型を中心にしたプログラミング

後者の考え方はObjective-Cをやってきた人には馴染みが薄いかもしれません。これらは元の型を別の型に変える事を中心に考えるやり方です。実装したいことがあった場合、初めの型と終わりの型を考える。

もしその二つの型が直接変換できない場合は、途中を埋める型を考える。

各型に変換していく関数を書き、それを関数適用することで、実装を行う。


殻を気にしない

ArrayやOptionalがただの殻だと考えた場合は、これらは同じように扱うことができる。Optionalが要素が0個か1個の配列だと考えれば、mapがあることで非常に自然に中身に対して操作ができる。SetやDictionayも同様である。

mapだけではない

Swiftではこれらの型を総じてCollectionTypeというprotocolによって実装されている。CollectionTypeであればどの殻であっても同じように扱うことができる(特にSwift 2.0以降では)。CollectionTypeには他にfilterやreduceなど様々な便利なメソッドが実装されている。これらのメソッドを使えば、for文をほとんど使うことなくプログラミングできるようになるだろう。

まとめ

型を中心に考えることによってCollectionTypeを十分に扱えるようになるだろう。