「もうなにもこわくない」関数型言語 by @parrot_studiofor 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
「もうなにもこわくない」関数型言語 by @parrot_studiofor 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_studiofor 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_studiofor Gunma.web #13 on 2013/05/18
blockはroomsを持っている
か知っているよね?
class Block
# ...
def has_rooms?
self.rooms.empty? ? false : true
end
# ...
end
29.
「もうなにもこわくない」関数型言語 by @parrot_studiofor 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
「もうなにもこわくない」関数型言語 by @parrot_studiofor 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_studiofor 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_studiofor 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_studiofor Gunma.web #13 on 2013/05/18
もうめんどいからガード条件も
合体
def rooms
(self.blocks || []).select(&:has_rooms?).collect(&:rooms).flatten
end
※空リスト([])のselectやcollectも[]を返す