関数型プログラミングの実際のところ

これは [Swift Tweets](https://swift-tweets.github.io/) の発表をまとめたものです。イベントのスポンサーとして Qiita に許可をいただいた上で、このような形（ツイートの引用）で投稿しています。

---

<blockquote class="twitter-tweet"><p dir="ltr">こんばんは。霜鳥と申します。Swiftが公開され3.0になった現在も、学生をやったり、それから@koherさんの下で修行したりしてます。
https://twitter.com/S_Shimotori_pub/status/820225451691884544
#swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820295684481949697"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">それではSwift TweetsのLTを始めます。テーマは「関数型プログラミングの実際のところ」です。よろしくお願いします。
関数型プログラミング(FP)を信じ、JSONデコーダArgoを使った、が。 #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820295810218721282"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">Argo(https://github.com/thoughtbot/Argo)を始めとするFPの利点はこの2つでしょうか。
1. 安全。副作用がない
2. 見た目すっきり #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820295935997591553"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">1.
FPは副作用がなく安全です。バグを減らせるしテストしやすいし、凡ミスをよくやる私の強い味方です。
Argoの場合は、Decodedというモナド(主にファンクターとアプリカティブ)でデコード成功/失敗を扱ってます。 #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296061902147585"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">2.
関数の組み合わせですっきり処理を書くことができます。ArgoとSwiftyJSONを比べてみるとこんな感じ。 #swtws

https://gist.github.com/6e59b08999b2259d906d9cd75667ab44</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296200188346369"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">しかし問題もあります。
1. ビルドが遅くなる
2. わかりづらい #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296338659098624"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">1.
FPは型推論を必要とする回数が多くなります。型推論は時間がかかるので、例えばArgoでパラメータの多いJSONをデコードするコードを書くとビルド時間が非常に遅くなります。
参考: http://techlife.cookpad.com/entry/2016/12/28/112806 #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296464530165760"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">(続き)型を明示すれば型推論の仕事を減らすことができます。つまり、関数がずらずらつながっている場合、「わざわざフローを止めて型を書く」というコードが増えます。 #swtws

https://gist.github.com/443db4a772131070373665dbbfec501e</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296590371917828"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">2.
FPは関数の組み合わせです。わかればすっきりとした見た目で一目で内容を把握できるものですが、慣れるまでが大変です。どの関数を使えばやりたい処理が実現できるのか？目の前の処理の具体的なフローはどうなっているのか？ #swtws

https://gist.github.com/e57c067c9bba7dded97de65825c65933</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296716519755777"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">というわけでまとめ。
FPを完全に使いこなすには、FPに自分とビルドが追いつかないといけません。
(現実的なビルド時間の範囲で)よりスマートなArgoの書き方を考えたりRxSwiftの関数の組み合わせを考えたり…。 #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296842596339712"></a></blockquote>

<blockquote class="twitter-tweet"><p dir="ltr">FPは使いこなすのにひと手間いりますが、安全だし慣れると楽しくなってきます。是非おためしください。
色々な実装が楽しめるのもSwift始めとするマルチパラダイムの面白みですよね。

ごTweet聴ありがとうございました。あ〜、try!Swift楽しみだな〜〜 #swtws</p>&mdash; @S_Shimotori_pub <a href="https://twitter.com/S_Shimotori_pub/status/820296967959941125"></a></blockquote>

---

以上です。

ごTweet聴してくださった皆様、スポンサーの皆様、主催の皆様、koherさん、ありがとうございました。