[イベントレポート] Swift実践入門読書勉強会 #7 に参加してきました #read_swift

logo_swift_400x400

はじめに

おばんです、昼飯に秋葉原をふらふらしていたら、たまたまラブライブの聖地の一つである竹むらさんを初めて見つけた田中です。甘いものは素直に好きなので今度甘味を食べに行ってみようと思います。

今日はかねてより参加したいと思っていた Swift実践入門読書勉強会 に参加させていただいたのでそのレポートをまとめます。今日のテーマはSwiftのエラー処理について。

IMG_7112

Swift実践入門読書勉強会 #7 の概要

Swift実践入門の読書会を7回開催する予定で、これが最終回です。 想定している参加者は、Swiftの基本を最低限理解されていて、実務上、もっとSwiftyなコードを書きたい!と熱望されている方を対象としています。 ですので、Swift実践入門の前半にかかれている基本事項はこの勉強会では触れません。 今回は第13章 エラー処理からすすめていきます。

時間は80分程度、発表者を中心として本の解説をしていきますが、随時、質問や補足なども歓迎します。双方向な勉強会でみんなで学んでいきましょう! 時間の制限があるので、本編から派生した面白い話は、FacebookグループやTwitterのハッシュタグ#read_swiftで展開されていければいいなあと考えています。

Connpass より引用

内容

Optional型を用いたエラー処理

Optional型を使うことで、nilを扱うことができるようになります。エラーの理由など、詳しい情報が必要ない場合は関数などの戻り値がnilであるかどうかということなどをエラー処理として簡易的に表すことができます。これは失敗可能イニシャライザなどでも扱われます。

Result型を利用したエラー処理

Optional型と比較して、Result型を用いるとエラーの詳細を連想値として渡すことができるので、より詳細にエラーの情報を得ることができます。また、Result型は必ず成功か失敗のどちらかの結果に当てはまるので、エラー時の想定し得なかった不正なパターンのリスクを考慮する必要がなくなる利点があったり、エラーの型を保持したまま呼び出し元に伝播することができるので、どんなエラーが返ってくるかというパターンが絞られるという点も大きなメリットとして挙げられます。

簡易的なResult型の実装の他に、より高機能なResult型の紹介もされました。

do-catch文を利用したエラー処理

do-catch文もOptional型と比較して、より詳しいエラーの情報を取得することができます。do-catch文の長所としては、複数の型のエラー文を一律で扱うことができるということ。またその反面としてエラーのthrow時にはエラーの型情報がなくなってしまうため、どんなエラーが返却されるかという型の推論ができなくなってしまう短所も紹介されました。

do-catch文とthrowsによるエラー処理にdefar文を活用する

throwsキーワードをつけた関数ではエラーがthrowされた時点でそれ以降の処理を中断してしまいますが、defar文を活用することで、エラーの有無に関わらず行いたい処理をそのスコープを抜ける直前に行うことができるとのことでした。

rethrowsキーワードについて

throwsキーワードを利用するクロージャを引数に持った関数に対して使うrethrowsキーワード。引数として受け取ったクロージャによってthrowされるエラー以外を認めない性質の模様。

flatMapでResult型を扱う場合と、定義の解説

Result型を扱っていると遭遇しがちなswitchでネストするResult型。とても読みにくくなっていきがちですが、flatMapを使うことでうまく回避できるという話。

著者である石川氏直接のライブホワイトボーディング。

IMG_2054

以下のリンクのflatMapの実装がまさに該当する実装とのこと。

さいごに

第13章のエラー処理について触れた今日の会で最終回を迎えたSwift実践入門読書勉強会さん。これまで「なんとなく」での理解でいたSwiftのより良い利用方法を多く知ることができたので大満足でした。また、今回は著者である石川氏が急遽参加することとなり、最終回にふさわしい、素晴らしい会だったなと感じました。

今度からはKotlinスタートブック読書勉強会とのことなので、ぜひご興味ある方はそちらもぜひご参加を!