これは Swift Tweets の発表をまとめたものです。イベントのスポンサーとして Qiita に許可をいただいた上で、このような形(ツイートの引用)で投稿しています。
こんばんは。霜鳥と申します。Swiftが公開され3.0になった現在も、学生をやったり、それから@koherさんの下で修行したりしてます。 https://twitter.com/S_Shimotori_pub/status/820225451691884544 #swtws
— @S_Shimotori_pub
それではSwift TweetsのLTを始めます。テーマは「関数型プログラミングの実際のところ」です。よろしくお願いします。 関数型プログラミング(FP)を信じ、JSONデコーダArgoを使った、が。 #swtws
— @S_Shimotori_pub
Argo(https://github.com/thoughtbot/Argo)を始めとするFPの利点はこの2つでしょうか。 1. 安全。副作用がない 2. 見た目すっきり #swtws
— @S_Shimotori_pub
1. FPは副作用がなく安全です。バグを減らせるしテストしやすいし、凡ミスをよくやる私の強い味方です。 Argoの場合は、Decodedというモナド(主にファンクターとアプリカティブ)でデコード成功/失敗を扱ってます。 #swtws
— @S_Shimotori_pub
2. 関数の組み合わせですっきり処理を書くことができます。ArgoとSwiftyJSONを比べてみるとこんな感じ。 #swtws
https://gist.github.com/6e59b08999b2259d906d9cd75667ab44
— @S_Shimotori_pub
しかし問題もあります。 1. ビルドが遅くなる 2. わかりづらい #swtws
— @S_Shimotori_pub
1. FPは型推論を必要とする回数が多くなります。型推論は時間がかかるので、例えばArgoでパラメータの多いJSONをデコードするコードを書くとビルド時間が非常に遅くなります。 参考: http://techlife.cookpad.com/entry/2016/12/28/112806 #swtws
— @S_Shimotori_pub
(続き)型を明示すれば型推論の仕事を減らすことができます。つまり、関数がずらずらつながっている場合、「わざわざフローを止めて型を書く」というコードが増えます。 #swtws
https://gist.github.com/443db4a772131070373665dbbfec501e
— @S_Shimotori_pub
2. FPは関数の組み合わせです。わかればすっきりとした見た目で一目で内容を把握できるものですが、慣れるまでが大変です。どの関数を使えばやりたい処理が実現できるのか?目の前の処理の具体的なフローはどうなっているのか? #swtws
https://gist.github.com/e57c067c9bba7dded97de65825c65933
— @S_Shimotori_pub
というわけでまとめ。 FPを完全に使いこなすには、FPに自分とビルドが追いつかないといけません。 (現実的なビルド時間の範囲で)よりスマートなArgoの書き方を考えたりRxSwiftの関数の組み合わせを考えたり…。 #swtws
— @S_Shimotori_pub
FPは使いこなすのにひと手間いりますが、安全だし慣れると楽しくなってきます。是非おためしください。 色々な実装が楽しめるのもSwift始めとするマルチパラダイムの面白みですよね。
ごTweet聴ありがとうございました。あ〜、try!Swift楽しみだな〜〜 #swtws
— @S_Shimotori_pub
以上です。
ごTweet聴してくださった皆様、スポンサーの皆様、主催の皆様、koherさん、ありがとうございました。