Upgrade to Pro — share decks privately, control downloads, hide ads and more …

怖くないCats

75086cfa4a46d4aa47deb38b409bd9cd?s=47 Jun Tomioka
October 15, 2018
460

 怖くないCats

75086cfa4a46d4aa47deb38b409bd9cd?s=128

Jun Tomioka

October 15, 2018
Tweet

Transcript

  1. 怖くない Cats @jooohn1234

  2. M3, Inc. @jooohn1234 • じょん と呼んでください • エムスリーのエンジニア ◦ Scala

    ・ FP 好き ◦ 猫2匹と同居
  3. None
  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. モナドは プログラム可能な セミコロン!!

  13. やばい世界に 足を踏み入れて しまった

  14. None
  15. None
  16. None
  17. None
  18. 完全にこわい

  19. None
  20. None
  21. None
  22. None
  23. None
  24. None
  25. None
  26. None
  27. None
  28. None
  29. Catsは 怖くない!

  30. Motivations • Approachability • Modularity • Documentation • Efficiency

  31. Motivations • Approachability • Modularity • Documentation • Efficiency

  32. Motivations • Approachability • Modularity • Documentation • Efficiency ドキュメントが充実していて

    とっつきやすい!
  33. Monoid

  34. None
  35. None
  36. None
  37. None
  38. None
  39. 二項演算 (Int, Int) => Int 単位元 Int

  40. 二項演算 (Int, Int) => Int 単位元 Int こういう感じの性質を 持っているやつが Monoid

    注:ざっくりした説明です
  41. 例でなんとなく理解するMonoid (厳密には Monoid lawsを参照) Monoid 単位元 (empty) 二項演算 (combine) 例

    Int の 加算 0 + 0 + 1 + 2 + 0 = 3 Int の 乗算 1 * 1 * 3 * 5 * 1 = 15 List の 連結 Nil ::: Nil ::: List(3) ::: List(5, 8) ::: Nil = List(3, 5, 8)
  42. Monoid laws law Intの加算 の例 (a combine b) combine c

    = a combine (b combine c) (1 + 2) + 3 = 6 1 + (2 + 3) = 6 empty combine a = a 0 + 1234 = 1234 a combine empty = a 1234 + 0 = 1234
  43. なんかわかるきがする!

  44. ・・・

  45. それで なにがうれしいんだっけ

  46. None
  47. None
  48. None
  49. None
  50. みたことあるきがする

  51. None
  52. None
  53. こういうときある

  54. こういうときある

  55. None
  56. なんかややこしい

  57. None
  58. Monoidはつくれる!

  59. None
  60. 全てのMonoidに対して Foldable#foldMapが使える

  61. None
  62. ・・・

  63. ほとんど Int と同じなのに めんどうだなあ

  64. None
  65. None
  66. None
  67. Int と Price は値を変えずに交換可能

  68. None
  69. None
  70. None
  71. None
  72. None
  73. None
  74. 便利!

  75. 雑感 • Cats は怖くないし便利! ◦ Approachability / Documentation ▪ ドキュメントを読み進めながら学習が進む。

    ◦ 便利と思ったものだけ使えば良い ▪ 自分やチームの成長とともに徐々に扱う範囲を増やしていける。 ◦ 1エンジニアとして学んでいて楽しい。 ▪ 汎用的で腐りにくい抽象化の知識。 • とはいえ、濫用には注意 ◦ 使ったほうがコードが理解しやすい / 堅牢になるといった場面で使うべき。 ▪ 『ハンマーを持つ人には全てが釘に見える』に注意。 ◦ 自分やチームメンバーの理解を超えて使わない。 ▪ 無理して使うものではない。