Pro Yearly is on sale from $80 to $50! »

「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜

「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜

2013/05/18に「Gunma.web #13」でプレゼンするはずだった資料
ソースはこちら https://github.com/parrot-studio/gunmaweb13-functional-language-retry

Transcript

  1. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 「もうなにもこわくな い」

    関数型言語 ふつうのプログラマが 関数型言語を知るべき理由・reload ぱろっと(@parrot_studio) Gunma.web #13
  2. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 注意事項 本スライドは「Gunma.web

    #13」で発表するはずのものでした 当日ドタキャンしたため、一度も外 部で発表していません 情報は2013/05時点のものであ り、今となっては古いものが多いで す
  3. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 それでは 本編を

    (´・ω・)っ
  4. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Profile ぱろっと(T.Tachiki)

    @parrot_studio parrot-studio.com プログラマっぽい何か (比較的)言語マニア
  5. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 2013/02/14

  6. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Developers Summit

    2013
  7. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "こわくない関数型言語" http://event.shoeisha.jp/detail/1/session/13/

  8. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 結論

  9. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 関数型怖い(((((( ;゚Д゚)))))

  10. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 このセッショ ンで聞いた

    大事なこと
  11. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 大事なこと "関数型言語があるのではない、

    関数型プログラミングがあるだけ だ"
  12. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "関数型プロ グラミング"

    とは?
  13. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 それやったわー2年前にやった わー

    http://www.slideshare.net/parrotstudio/ gunmaweb-5-20110514
  14. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 でも、あれ いまいち

    (´・ω・`)
  15. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 私たちが知りたいこと 「どう書くと

    ”それっぽい” のか?」
  16. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 その 一例

  17. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 以下の条件をつけて書く else/elsifを使わない

    for(;;)文を使わない
  18. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 you may

    say... "こんなの絶対おか しいよ"
  19. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 極力使わな いでどう書け

    るかを考える
  20. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 elseを使えない? 三項演算子

    case文 ガード条件(後置構文) メソッドの細分化
  21. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 forが使えない? リストベースの処理

    each/select/find/map... 再帰
  22. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 実際にや ってみよう

    (`・ω・´)
  23. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 例:書きたいコード blockの中にある(かもしれない)

    roomのリストをくれщ(゚Д゚щ)
  24. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Rubyでとりあえず書く def

    get_room_list_from_blocks if self.blocks.nil? return [] elsif self.blocks.size <= 0 return [] else ret = [] for i in (0..self.blocks.size) rooms = self.blocks[i].rooms if rooms.size > 0 for j in (0..rooms.size) ret << b.rooms[j] end end end return ret end end
  25. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 間違ってはい ないけど

    も・・・ (´-ω-)
  26. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ガード条件は後置構文ですっき り

    def get_room_list_from_blocks return [] if (self.blocks || []).empty? ret = [] for i in (0..self.blocks.size) rooms = self.blocks[i].rooms for j in (0..rooms.size) ret << b.rooms[j] end end return ret end
  27. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "for"を"each"に変えよう def

    get_room_list_from_blocks return [] if (self.blocks || []).empty? ret = [] self.blocks.each do |b| rooms = b.rooms unless rooms.empty? rooms.each do |r| ret << r end end end return ret end
  28. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 blockはroomsを持っている か知っているよね?

    class Block # ... def has_rooms? self.rooms.empty? ? false : true end # ... end
  29. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "roomsを持っているblockを 選ぶ"ようにしましょう

    def get_room_list_from_blocks return [] if (self.blocks || []).empty? ret = [] bs = self.blocks.select(&:has_rooms?) bs.each do |b| b.rooms.each{|r| ret << r} end return ret end
  30. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 リストを処理するメソッドにはこ んなものも

    collect : リストから評価した値を 集める 個人的にはmapをよく使う flatten : リストを平坦にする [1, [2,3], [4, [5,6]]].flatten => [1,2,3,4,5,6]
  31. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "collect"や"flatten"も使い ましょう

    def get_room_list_from_blocks return [] if (self.blocks || []).empty? ret = self.blocks.select(&:has_rooms?).collect(&:rooms).flatten return ret end
  32. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Rubyは「最後に評価した値を 返す」のでreturnいりません

    def get_room_list_from_blocks return [] if (self.blocks || []).empty? self.blocks.select(&:has_rooms?).collect(&:rooms).flatten end
  33. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 「名前」はわかりやすくシンプル に

    def rooms return [] if (self.blocks || []).empty? self.blocks.select(&:has_rooms?).collect(&:rooms).flatten end
  34. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 もうめんどいからガード条件も 合体

    def rooms (self.blocks || []).select(&:has_rooms?).collect(&:rooms).flatten end ※空リスト([])のselectやcollectも[]を返す
  35. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 一行 Σ(゚Д゚)

  36. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 しかも・・・ blocks.select(&:has_rooms?).collect(&:rooms).flatten

    「blocksからroomsを持ったものを 選び、roomsを集めてリストにして返 す」と読める
  37. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ね、簡単で しょう

    (´・ω・)?
  38. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 「簡単」の定義とは 【審議中】

    (´・ω) (´・ω・) (・ω・`)
  39. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 冗談は さておき

  40. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 関数型っぽく書くと・・・ 定義の羅列になる

    なんとなく読める 意図・目的が明確に
  41. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 そうは言う がな

    大佐・・・
  42. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "いや、私には関係ないし" 関数型とか使う機会ないですし

    Rubyなんてあいまいな言語で書き ませんし Javaの方がしっかりしてますし サーバサイド書きませんし ScalaでWebとかありえませんし
  43. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ありえない・・・? http://www.playframework.com/

  44. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Javaと関数型は関係ない・・・? http://d.hatena.ne.jp/nowokay/20130504#1367702641

  45. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 サーバサイドはやらないから関 係ない・・・?

    JavaScriptはLispの子孫 最近のjQueryはだいぶ「それっぽ い」記述に 特に非同期イベント周り
  46. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 もはや、逃 げ場はない

    (lll゚Д゚)
  47. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 you may

    write... "やっぱり 関数型こわい (((((( ;゚Д゚)))))"
  48. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 すぐにできること メソッドを簡潔にまとめる

    メソッド内のネストを深くしすぎない 深くなる場合はたいてい大きすぎる 「言葉」を重視する 結局、その処理は「何をしたい」のか?
  49. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 できるとこ ろからやっ

    てみよう
  50. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ありがとう ございました

    (´・ω・)っ旦~