良いセッションはたくさんあったのですが、書き切れませんね。

平常心で型を消し去る (Gwendolyn Weston)

Associated Typeを持つプロトコルは型制約でしか使えないため、型パラメーターが利用側に波及しがちになるという問題があります。セッションでは型パラメーター地獄について話していなかったと思いますが、紹介されていたAnyPokemonのようなパターンは(表面上の)型を消すことでこの問題を解決できそうだなあと思いました。また、このパターンはRxSwiftでもAnyObserverで使われています。

完全に余談ですが、Gwendolyn Westonさんはスピーカーディナー後のカラオケパーティでモーニング娘のLOVEマシーンを歌っていて、めっちゃ上手かったです。

Swiftのエラー処理についての三つの話 (Yuta Koshizawa)

Swift 2の時点では、throwはUntyped Throwsなので、Result型もUntyped Errorで良いのかもという気がします。自分自身、エラーが型付けされた仕組みの中でエラーの型変換に振り回されてしまった経験もあるので、共感できるところが多いなあと思いました。とはいえ、型付けされていたことで楽をできたケースも同じくらいあるので、一概には言えないところです。それと、偶然だと思いますが、RxSwiftとReactiveCocoaにもエラーが型付けされるかどうかの違いがあるので、判断材料になるかもしれません。

koherさんとは期間中何度かお話できたのですが、その中で個数を1つに絞ったTyped Throwsについての話を聞けたのが面白かったです。これは要するに、throwsで投げられるエラーの型の個数を1つに絞れば、レイヤーに応じた適切なエラーへの翻訳が強制できるというもので、swift-evolutionで議論されていたアイディアだそうです。今後、Swiftのエラーがどうなっていくのかわかりませんが、今回のセッションを聞いて考える材料を蓄えることができました。

こういった25分に収まりきらなかった話を聞く時間がたくさん用意されていたことも、今回のカンファレンスの良いところでした。

自分のセッションについて

“Protocol-Oriented Programming in Networking”というタイトルでした。Rxの方に注目が行ってしまったようですが、言いたかったことはリクエストの型から型推論されたレスポンスのストリームが流れてきたら便利というものでした。その土台を支えているのがプロトコルです。

プロトコルには単なるインターフェース以上の意味があり、以下の2つが特徴的です。

  • Associated Typeによる型の関係性
  • 型制約付きProtocol Extensionsによる型を組み合わせた実装

Protocol-Oriented Programmingって何?という人には、WWDC 2015のProtocol-Oriented Programming in Swiftを観てから、標準ライブラリの設計を読むことをおすすめします。個人的なイチオシはSequenceTypeのsort()メソッドです。

extension SequenceType where Self.Generator.Element: Comparable {
    func sort() -> [Self.Generator.Element]
}

感想

セッションを聞くことはもちろん重要ですが、色んな人と話すのも同じくらい重要だと思いました。自分のセッションに関しても、自分が話したこと以上に多くのフィードバックをもらえたと思います。今回、幸運にも自分はスピーカーとして参加できたので多くの人が話しかけてくれましたが、今後は自分で意識的に興味のある人に話しかけて行かないとなあと感じました。

かなり疲れましたが、年に1度くらいこういった機会があるといいなあと思いました。

宣伝

Swiftの基礎 + 実践の本を執筆中で、Swift 3.0が出る頃に発売予定です!