Save 37% off PRO during our Black Friday Sale! »

例外は"投げない"〜Scalableエラー処理入門

15c2fcbb0358a6c4910fb043e2b1f71e?s=47 YuitoSato
December 22, 2017

 例外は"投げない"〜Scalableエラー処理入門

https://d-cube.connpass.com/event/74106/
「教養としてのScala ~ そろそろ始めてみたい2017冬」のLTのひとつです。

15c2fcbb0358a6c4910fb043e2b1f71e?s=128

YuitoSato

December 22, 2017
Tweet

Transcript

  1. ETDBMB ྫ֎͸l౤͛ͳ͍z d4DBMBCMFΤϥʔॲཧೖ໳d ϏζϦʔνࠤ౻༗ే

  2. ETDBMB ࿩͢ਓ w ৽ଔ೥໨ w ֶੜͷࠒ͸3VCZ w ۀ຿Ͱ͸4DBMBͱ5ZQF4DSJQU w 4DBMBྺ͸൒೥

    ࠤ౻༗ేʢ!:VJJJUPUPʣ
  3. ETDBMB Έͳ͞Μ

  4. ETDBMB ྫ֎

  5. ETDBMB ౤͛ͯ·͔͢ʁ

  6. ETDBMB ྫ֎

  7. ETDBMB ัͬͯ·͔͢ʁ

  8. ETDBMB ྫ֎Λ౤͛ͳ͍ Τϥʔॲཧ͋Γ·͢ ͱ͍͏࿩Λ͠·͢

  9. ETDBMB ࠓ೔ͷΰʔϧ w 4DBMBͷΤϥʔॲཧΛ஌Δ w ྫ֎Λ౤͛ΔҎ֎ͷΤϥʔॲཧ͕͋Δ͜ͱ΋஌Δ

  10. ETDBMB Τϥʔॲཧͷྺ࢙ ͬ͘͟Γ PS/VMM࣌୅ ྫ֎ॲཧ ΤϥʔʹҙຯΛ͍࣋ͨͤͨ Τϥʔ͸·ͱΊͯॲཧ͍ͨ͠

  11. ETDBMB ྫ֎ॲཧͱ͸ʁ ݺͼग़͠ݩ ϝιου */ Τϥʔʂ $BUDIઅ ίʔϧελοΫΛͨͲΔ 065

  12. ETDBMB ͭΒ͍͜ͱ΋͋Δ ݺͼग़͠ݩ ϝιου 065 ίʔϧελοΫΛͨͲΔ $BUDIઅ

  13. ETDBMB ੍ޚϑϩʔ͕̎ͭ

  14. ETDBMB ͭΒ͍͜ͱᶄ ݺͼग़͠ݩ ϝιου 065 Τϥʔʂ ίʔϧελοΫΛͨͲΔ ❓❓ */

  15. ETDBMB $BUDI͠๨ΕΔ

  16. ETDBMB ͭΒ͍͜ͱ·ͱΊ ੍ޚϑϩʔ͕ෳࡶ Τϥʔॲཧ๨Ε

  17. ETDBMB ͍ͨ͜͠ͱ·ͱΊ ੍ޚϑϩʔΛ੔ཧ ΤϥʔॲཧΛڧ੍

  18. ETDBMB ੍ޚϑϩʔΛ੔ཧ͢Δʹ͸ ݺͼग़͠ݩ ϝιου &SSPSPS ਖ਼ৗ஋ &SSPSPS ਖ਼ৗ஋ Τϥʔ΋ҰͭͷΦϒδΣΫτͱͯ͠ฦ͢

  19. ETDBMB ͦ͜Ͱ4DBMBͩʂ

  20. ETDBMB ͦ͜Ͱ&JUIFSͩʂ

  21. ETDBMB 4DBMBͷ&JUIFSͱ͸ʁ w ̎ͭͷΦϒδΣΫτΛอ࣋Ͱ͖ΔΫϥε w ࣦഊ࣌ -FGU ͷΦϒδΣΫτɺ੒ޭ࣌ 3JHIU ͷΦϒδΣΫτΛอ࣋

    w ̎ͭಉ࣌อ࣌͸Ͱ͖ͳ͍ &JUIFS -FGU 3JHIU
  22. ETDBMB ࣮ࡍʹॻ͍ͯΈΑ͏ def signUp(email: String): Either[Error, User] = { If

    (email.length < 5) { Left(Error(“Too Short Email!”)) } else { Right(User(email)) } } case class Error(msg: String) case class User(email: String) ฦΓ஋ ϝιου new &
 return Class
  23. ETDBMB ࣮ࡍʹॻ͍ͯΈΑ͏ def signUp(email: String): Either[Error, User] = { If

    (email.length < 5) { Left(Error(“Too Short Email!”)) } else { Right(User(email)) } } case class Error(msg: String) case class User(email: String) &JUIFS -FGU
 &SSPS 3JHIU 6TFS
  24. ETDBMB ͭ·Γ͜͏͍͏͜ͱ ݺͼग़͠ݩ TJHO6Q &JUIFS -FGU
 &SSPS 3JHIU 6TFS &JUIFS

    -FGU
 &SSPS 3JHIU 6TFS String
  25. ETDBMB Τϥʔॲཧ΋ڧ੍Ͱ͖Δ def main(args: Array[String]): Unit = { val either=

    signUp(“hoge@hoge.com”) either match { case Right(user) => logger.info(user.email) case Left(error) => logger.error(error.msg) } } ੒ޭͳΒ ࣦഊͳΒ
  26. ETDBMB ඒ͍͠ʢओ؍ʣ

  27. ETDBMB ͓͞Β͍ w ΤϥʔPSਖ਼ৗ஋ͱ͍͏஋Λฦ੍ͯ͠ޚϑϩʔΛ੔ཧ͢Δ w &JUIFS͸ΤϥʔॲཧΛڧ੍Ͱ͖Δ w ʢ͝ར༻͸ܭըతʹʣ

  28. ETDBMB ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ