(十分に書き取れていない!申し訳ない!!)
エラー処理は安全なコードを書く上で重要です。私のプレゼンテーションでは、主に私の経験と考えに基いて、また
Error Handling Rationale and Proposal
と swift-evolution のメーリングリストでの議論にも触れながら、 Swift におけるエラー処理の論点を整理します。
私にとって初めてのプレゼンです。
エラーハンドリングについて3つの話をします。
オプショナルと出会う
Swiftに出会う前にオプショナルのようなものに触れています。Basicで。
C言語のエラー処理では忘れてしまいがち
エラーを無視したい時もある。そういう時にも意味のないエラーハンドラーを書く必要があります。
それからSwiftのOptionalに出会いました。NullPointerを避けます。
オプショナルによってもっと一般化出来ます。遅延評価が可能でオプショナルを変数に代入してから使うことが出来ます。
ただそれほどバラ色ではありません。2乗したりすると入れ子になっていきます。
Json変換でも、デコード途中でFailすることがあります。 こういったものをどうやってイニシャライズするか。 flatmapはネストが深くなるので
アプリカティブスタイルでは使いやすいです。でも増えたら大変ですね。
糖衣構文でも使いやすくなっている。OptionalChainingもつかえる。
OptionalはTypeSafeでありながら実用的です。
Success or Failure
デバッグがしづらい。パースでどちらがFailしたのかわかりづらい
3つの解決策を考えました。
Touple
4種類で最後の2つが好ましくない
Unionで拡張するのはSwiftらしくない
ResultがOptionalのような糖衣構文があれば便利
しかしうまく行かない例
増えると困る
このように宣言すると
幾つかの例外だけ処理できればよいのではないか。
オペレーションをケースによって分岐させたいがすべてのエラーを対処したくない。
Try
Swift2.0においてtry catchが導入されました。 最初の印象は悪かったですが勉強したらいいものだと分かりました。
何故トライキャッチを入れたかはドキュメントに書いてあります。
Manuao propagation と Automatic propagation すべてのプログラマがこれらを理解するのは難しいかと思います。
コアチームはHaskellのDoに触れています
Automatic Propagation をSwiftに導入することはいいことです。
一見安全でないかのようですが安全
Javaは何のエラーが飛んで来るかわからない。
Swiftでも同じことが起きるのではないかと思った。
しかしSwiftではtryを書きます。どの行からエラーが出るか明確になります。
Untype Throw がなくなりました。
Marked Propagationはこれらを解決します
じゃあこれをOptionalに導入したら?
CoreTeamによればOptionalはシンプルなエラーを表す。
私はこう使えばいいと思っている。
これをResultに応用することも出来る。
Resultでより柔軟なエラーハンドリング、遅延処理が可能になる。
具体例を上げます。
MapとThrow、このような形で書けます。
Resultとしてthrowを使うとCompilation Errorが出る。 でもトータルで考えるとResultをThrowで使ったほうがいいと思っている
Promiseを実装してみた
SwiftでもAsync、 waitをSwiftで扱うことを議論する必要があると私は思います。このシンタックスをSwiftで使うと下のようになります。
async await throw result それぞれが共通のコンセプトを持っています。
私の考えを話してきました。みなさんのSwiftのエラーハンドリングの考えを聞きたいです。
これから無料のオンラインの書籍を出していきたいと思っています。 安全ではない、複雑な環境に対する苦労がある
Swiftがオープンソースになったので、これを私たちの中でも実践できると思っています
さっきのスライドのコードはこれかな。https://t.co/YaIBPVhBH8#tryswiftconf
— WorldDownTown (@WorldDownTown) 2016年3月2日
Q&A で @koher さんにも話をうかがった。try/throw の背後には Result が、async/await の背後には Promise があって、どちらもモナドであって同じ構造とみなせる、ということで興味深かった #tryswiftconf
— 宇佐見 公輔 (@usamik26) 2016年3月2日
今日僕の担当だった同時通訳の方は趣味でコードも書く方だったんだけど、Clojureがとてもいい言語だということを熱く語ってらした。まさか通訳者の方とClojureの話をすることになるとは思わなかったのでびっくりした。try! Swiftの通訳者すごい。 #tryswiftconf
— koher (@koher) 2016年3月2日
「"Stay typed. Stay practical." Swiftのエラー処理に関する3つの議論 #tryswiftconf」をトゥギャりました。 https://t.co/BdHSkUWLSs
— トゥギャッター開発まとめ (@tg__dev) 2016年3月2日
気に入った記事は はてなブックマーク
はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift
そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!