2015年6月28(日) Swift 2 (& LLDB) シンポジウムが開催されたので参加しました。
場所は渋谷のスマートニュース株式会社さん。
そうあの有名アプリの会社さん 参加者はオーディエンスの
申し込みだけでも80人の大規模な勉強会
まずは、岸川さんからの今回の勉強会の趣旨、
やり方などの説明があり What's new in Swift2として
新しいSwiftのトピックを解説
- Protocol Extensions
- Error Handling
- Guard Statements guard let ... else {}
- Defer Statements defer {}
- Pattern Matching
- OptionSetType
- Availability
- Function Pointers
- Open Source
このあとguard、@noreturnについての議論がパネリスト内で行われました。
一応アイスブレイクだったようなのですが、かなり議論がもりあがりました。
続いては、sonson_twitからSwiftは何処から手をつけていいかわからない。という議題が
この話は、かなり個人的に共感できる部分がありました。
各パネリストからの回答があり、話は、classとstructをどちらを使うか等の話に及んだり
class は全部finalで良いのかといった意見もとびだしました。
ここで一旦休憩があり、続いては
@_ishkawaの「Protocol Extension」
Protocol Extensionはインターフェースしか定義できなかった頃に比べて大幅にプログラミングを変えるということで
Swift1時代と Swift2時代のコードを比較しながら説明がありました。
Protocol Extensionでデフォルトの実装が可能になり、
Objectve-CでのProtocolでのoptional と同じことができる
標準ライブラリのmap関数を例に出し、どのように変わったかを
sortedを例として型制約付きのグローバル関数が
型制約付きのProtocol Extensionに変わったことを
非常にわかりやすく説明されていました。
Protocol Extensionで抽象クラスの継承の問題
抽象化による型の損失の問題を解決できるので
classで設計するより抽象化のコードには向いているそうです。
@es_kumagaiさんの「Swift2.0 大域関数の行方から」
Swift2.0で衝撃的な出来事として大域関数の大幅の削除で移動先のほとんどがprotocolに行ってしまったことがとても気になったそうで
Protocol Extensionは大域のジェネリック関数を全て置き換えるものなのかなと
また、Protocolになった場合での名前空間の衝突の問題。
型エイリアスの衝突を話されましたが、あまり問題にならないのではと結論
Protocol Extensionは積極的に使っていきましょう
大域関数に残ったものは使い分けが必要かもというお話でした。
再び休憩の後
@cockscombの「私とスウィフトとエラー」
Swift2.0のError Handringについて。昔はNSErrorのポインタからtry catchへ変わったことクロージャーのError Handring、非同期処理のコールバックでのエラーハンドリングの例を enum ValueOrErrorを定義してはどうか。。
エラーハンドリングはSwitch文のように網羅的であるかどうかなどを説明されました。
rethrowsなど知らないトピックがあり勉強不足を感じました。
@inamiyさんの「Swift 2 Error Handling V.S. Result」
同じくError Handlingについて、今までObjective-C時代のエラー処理から
Either/Resultに話が及び、Swift2になりtry catchにエラーの型が緩いのでResultよりも良さげだけど本当?エラー型がゆるすぎる、非同期の処理では扱いにくい等の問題を説明。
非同期はLazy throwingという仕組みを考えられ、そちらはどうかと提案
やっぱり、Resultが今の所良さげかなと結論。
Resultにしたときの問題点、デメリットも説明。
最終的にRustを検討。Resultにたいしてthrowを行うことが綺麗で良いのではとのこと
勉強会自体、かなり長丁場で、後半かなり聞いているだけでも
疲れるか感じだったのですが、共感できる疑問点もあり非常に有意義に感じました。
また、いつもの発表会形式とは趣が違い、他人の疑問点、思い
試行錯誤などを垣間見られたのは貴重でした。
0 件のコメント:
コメントを投稿