؇͘ॻ͖͍ͨɿؔ
func fib(n)
case n
when 0, 1
ret 1
else
ret fib(n-1) + fib(n-2)
end
end
func main()
println(fib(10))
# UFCS ʹΑΔߏจҥ
10.fib.println
end
Slide 9
Slide 9 text
؇͘ॻ͖͍ͨɿҾ
func fib(n)
case n
when 0, 1
ret 1
else
ret fib(n-1) + fib(n-2)
end
end
template
auto fib(T const n) {
if (n <= 1) {
return 1;
} else {
return fib(n-1) + fib(n-1);
}
}
ҾͷܕΛॻ͔ͳ͍ͱؔςϯϓϨʔτʹɽ
fib(n: int): int ͷΑ͏ʹܕΛॻ͘͜ͱͰ͖Δ
%BDIT $
Slide 10
Slide 10 text
؇͘ॻ͖͍ͨɿdo-end ߏจ
func each(array, block)
var i := 0u
for i < array.size
block(array[i])
i += 1u
end
end
func main
[1, 2, 3].each do |i|
println(i)
end
# ϥϜμࣜΛ͏ݺͼग़͠ͷߏจҥ
each([1, 2, 3], -> i in println(i))
end
Slide 11
Slide 11 text
؇͘ॻ͖͍ͨɿdo-end ߏจ
func each(array, block)
var i := 0u
for i < array.size
block(array[i])
i += 1u
end
end
func main
[1, 2, 3].each do |i|
println(i)
end
end
• do-end ϒϩοΫΫ
ϩʔδϟʢมΛΩϟ
ϓνϟ͢Δಗ໊ؔʣ
ʹม͞ΕΔɽ
• ؔͷ࠷ޙͷҾͱ͠
ͯؔΦϒδΣΫτ͕
ͬͯ͘Δ
Slide 12
Slide 12 text
؇͘ॻ͖͍ͨɿclass
• init ͕ίϯετϥ
Ϋλ
• ϝϯόมͷܕ
Λਪଌ
• ίϯετϥΫλͷؔς
ϯϓϨʔτΛղܾ → Ϋϥ
εςϯϓϨʔτΛղܾ
class Random
init(@seed)
end
func gen
x := @seed
high := x / 127773
low := x % 127773
var t := 16807 * low - 2836 * high
t += 0x7fffffff if t <= 0
@seed = t
ret t
end
end
Slide 13
Slide 13 text
؇͘ॻ͖͍ͨɿclass
class Random
init(@seed)
end
func gen
x := @seed
high := x / 127773
low := x % 127773
var t := 16807 * low - 2836 * high
t += 0x7fffffff if t <= 0
@seed = t
ret t
end
end
template
class Random {
T seed;
public:
Random(T s)
: seed(s)
{}
auto gen() {
const auto
x = this->seed,
high = x / 127773,
low = x % 127773;
auto t = 16807 * low -
2836 * high;
if (t <= 0) {
this->seed = t;
}
return t;
}
};
%BDIT
$
Slide 14
Slide 14 text
؇͘ॻ͖͍ͨɿGC
• array ܕྻʹऔͬ
ͯ GC Ͱཧ͠ɼ৳ॖ
Մೳɽ
• ϥϯλΠϜ͕ libgc
(Boehm GC) Λͬͯ
͍Δ
func five_elems
# ྻώʔϓʹऔΓɼGC Ͱཧ
ret [1, 2, 3, 4, 5]
end
func main
five_elems()[2].println
end
Slide 15
Slide 15 text
੩తνΣοΫɿܕ
• มఆٛͰӈล͔ΒΛਪଌɼؔ ΫϥεͰ
ςϯϓϨʔτʹͯ͠༻࣌ʹΠϯελϯεԽ
func fib(n)
ret if n <= 1 then 1
else
fib(n-1) + fib(n-2)
end
end
func main()
result :=
if special then 42 else fib(n) end
end
Slide 16
Slide 16 text
੩తνΣοΫɿimmutability
# Ҿʹ var Λ͚Δ͔Ͳ͏͔Ͱ੍ޚ
func foo(var a, b)
# a clone ͞ΕɼมߋՄೳ
# OK!
a.modify_something()
# b ࢀরʹͳΓɼมߋෆՄೳ
# NOT OK!
b.modify_something()
end
func main()
kls := new SomeClass
foo(kls, kls)
end