「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
「もうなにもこわくな
い」
関数型言語
ふつうのプログラマが
関数型言語を知るべき理由・reload
ぱろっ...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
注意事項
本スライドは「Gunma.web
#13」で発表するはずのものでした
当日ドタキャンしたため、一度...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
それでは
本編を
(´・ω・)っ
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
Profile
ぱろっと(T.Tachiki)
@parrot_studio
parrot-studio.co...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
2013/02/14
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
Developers
Summit
2013
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
"こわくない関数型言語"
http://event.shoeisha.jp/detail/1/session...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
結論
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
関数型怖い(((((( ;゚Д゚)))))
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
このセッショ
ンで聞いた
大事なこと
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
大事なこと
"関数型言語があるのではない、
関数型プログラミングがあるだけ
だ"
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
"関数型プロ
グラミング"
とは?
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
それやったわー2年前にやった
わー
http://www.slideshare.net/parrotstud...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
でも、あれ
いまいち
(´・ω・`)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
私たちが知りたいこと
「どう書くと
”それっぽい”
のか?」
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
その
一例
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
以下の条件をつけて書く
else/elsifを使わない
for(;;)文を使わない
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
you may say...
"こんなの絶対おか
しいよ"
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
極力使わな
いでどう書け
るかを考える
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
elseを使えない?
三項演算子
case文
ガード条件(後置構文)
メソッドの細分化
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
forが使えない?
リストベースの処理
each/select/find/map...
再帰
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
実際にや
ってみよう
(`・ω・´)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
例:書きたいコード
blockの中にある(かもしれない)
roomのリストをくれщ(゚Д゚щ)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
Rubyでとりあえず書く
def get_room_list_from_blocks
if self.blo...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
間違ってはい
ないけど
も・・・
(´-ω-)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
ガード条件は後置構文ですっき
り
def get_room_list_from_blocks
return ...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
"for"を"each"に変えよう
def get_room_list_from_blocks
return...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
blockはroomsを持っている
か知っているよね?
class Block
# ...
def has_...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
"roomsを持っているblockを
選ぶ"ようにしましょう
def get_room_list_from_...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
リストを処理するメソッドにはこ
んなものも
collect : リストから評価した値を
集める
個人的にはm...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
"collect"や"flatten"も使い
ましょう
def get_room_list_from_bloc...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
Rubyは「最後に評価した値を
返す」のでreturnいりません
def get_room_list_fro...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
「名前」はわかりやすくシンプル
に
def rooms
return [] if (self.blocks ...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
もうめんどいからガード条件も
合体
def rooms
(self.blocks || []).select...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
一行
Σ(゚Д゚)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
しかも・・・
blocks.select(&:has_rooms?).collect(&:rooms).fl...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
ね、簡単で
しょう
(´・ω・)?
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
「簡単」の定義とは
【審議中】
(´・ω) (´・ω・) (・ω・`)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
冗談は
さておき
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
関数型っぽく書くと・・・
定義の羅列になる
なんとなく読める
意図・目的が明確に
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
そうは言う
がな
大佐・・・
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
"いや、私には関係ないし"
関数型とか使う機会ないですし
Rubyなんてあいまいな言語で書き
ませんし
Ja...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
ありえない・・・?
http://www.playframework.com/
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
Javaと関数型は関係ない・・・?
http://d.hatena.ne.jp/nowokay/201305...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
サーバサイドはやらないから関
係ない・・・?
JavaScriptはLispの子孫
最近のjQueryはだい...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
もはや、逃
げ場はない
(lll゚Д゚)
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
you may write...
"やっぱり
関数型こわい
(((((( ;゚Д゚)))))"
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
すぐにできること
メソッドを簡潔にまとめる
メソッド内のネストを深くしすぎない
深くなる場合はたいてい大きす...
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
できるとこ
ろからやっ
てみよう
「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18
ありがとう
ございました
(´・ω・)っ旦~
Upcoming SlideShare
Loading in...5
×

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

874

Published on

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

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
874
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
3
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 「もうなにもこわくな い」 関数型言語 ふつうのプログラマが 関数型言語を知るべき理由・reload ぱろっと(@parrot_studio) Gunma.web #13
  2. 2. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 注意事項 本スライドは「Gunma.web #13」で発表するはずのものでした 当日ドタキャンしたため、一度も外 部で発表していません 情報は2013/05時点のものであ り、今となっては古いものが多いで す
  3. 3. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 それでは 本編を (´・ω・)っ
  4. 4. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Profile ぱろっと(T.Tachiki) @parrot_studio parrot-studio.com プログラマっぽい何か (比較的)言語マニア
  5. 5. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 2013/02/14
  6. 6. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Developers Summit 2013
  7. 7. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "こわくない関数型言語" http://event.shoeisha.jp/detail/1/session/13/
  8. 8. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 結論
  9. 9. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 関数型怖い(((((( ;゚Д゚)))))
  10. 10. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 このセッショ ンで聞いた 大事なこと
  11. 11. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 大事なこと "関数型言語があるのではない、 関数型プログラミングがあるだけ だ"
  12. 12. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "関数型プロ グラミング" とは?
  13. 13. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 それやったわー2年前にやった わー http://www.slideshare.net/parrotstudio/ gunmaweb-5-20110514
  14. 14. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 でも、あれ いまいち (´・ω・`)
  15. 15. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 私たちが知りたいこと 「どう書くと ”それっぽい” のか?」
  16. 16. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 その 一例
  17. 17. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 以下の条件をつけて書く else/elsifを使わない for(;;)文を使わない
  18. 18. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 you may say... "こんなの絶対おか しいよ"
  19. 19. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 極力使わな いでどう書け るかを考える
  20. 20. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 elseを使えない? 三項演算子 case文 ガード条件(後置構文) メソッドの細分化
  21. 21. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 forが使えない? リストベースの処理 each/select/find/map... 再帰
  22. 22. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 実際にや ってみよう (`・ω・´)
  23. 23. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 例:書きたいコード blockの中にある(かもしれない) roomのリストをくれщ(゚Д゚щ)
  24. 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. 25. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 間違ってはい ないけど も・・・ (´-ω-)
  26. 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. 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. 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. 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. 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. 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. 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. 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. 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. 35. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 一行 Σ(゚Д゚)
  36. 36. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 しかも・・・ blocks.select(&:has_rooms?).collect(&:rooms).flatten 「blocksからroomsを持ったものを 選び、roomsを集めてリストにして返 す」と読める
  37. 37. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ね、簡単で しょう (´・ω・)?
  38. 38. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 「簡単」の定義とは 【審議中】 (´・ω) (´・ω・) (・ω・`)
  39. 39. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 冗談は さておき
  40. 40. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 関数型っぽく書くと・・・ 定義の羅列になる なんとなく読める 意図・目的が明確に
  41. 41. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 そうは言う がな 大佐・・・
  42. 42. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 "いや、私には関係ないし" 関数型とか使う機会ないですし Rubyなんてあいまいな言語で書き ませんし Javaの方がしっかりしてますし サーバサイド書きませんし ScalaでWebとかありえませんし
  43. 43. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ありえない・・・? http://www.playframework.com/
  44. 44. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 Javaと関数型は関係ない・・・? http://d.hatena.ne.jp/nowokay/20130504#1367702641
  45. 45. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 サーバサイドはやらないから関 係ない・・・? JavaScriptはLispの子孫 最近のjQueryはだいぶ「それっぽ い」記述に 特に非同期イベント周り
  46. 46. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 もはや、逃 げ場はない (lll゚Д゚)
  47. 47. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 you may write... "やっぱり 関数型こわい (((((( ;゚Д゚)))))"
  48. 48. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 すぐにできること メソッドを簡潔にまとめる メソッド内のネストを深くしすぎない 深くなる場合はたいてい大きすぎる 「言葉」を重視する 結局、その処理は「何をしたい」のか?
  49. 49. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 できるとこ ろからやっ てみよう
  50. 50. 「もうなにもこわくない」関数型言語 by @parrot_studio for Gunma.web #13 on 2013/05/18 ありがとう ございました (´・ω・)っ旦~
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×