scala kansai summit-2016

47
revival Scala Summit 2016

Upload: naoki-kitora

Post on 16-Apr-2017

773 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Scala kansai summit-2016

revival

Scala Summit 2016

Page 2: Scala kansai summit-2016

Page 3: Scala kansai summit-2016

Scala

Page 4: Scala kansai summit-2016

Scala ?

Page 5: Scala kansai summit-2016

?

Page 6: Scala kansai summit-2016

• Scala

Scala ?

Page 7: Scala kansai summit-2016

••

Page 8: Scala kansai summit-2016

••

Page 9: Scala kansai summit-2016
Page 10: Scala kansai summit-2016

f(x) = x + 1 Scala

• = ( ) •

Which is

better?

def f(x: Int) {x + 1}

def f(x: Int) = x + 1

def f(x: Int) = return x + 1

※ : 2

Page 11: Scala kansai summit-2016

( )

• (mutable)

Page 12: Scala kansai summit-2016

2

Page 13: Scala kansai summit-2016

?

int sum = 0;for (int i = 0; i < array.length; i++) { sum += array[i];}return sum;

Page 14: Scala kansai summit-2016

i = i + 1;

?

Page 15: Scala kansai summit-2016
Page 16: Scala kansai summit-2016
Page 17: Scala kansai summit-2016

https://goo.gl/iKyEKs

Page 18: Scala kansai summit-2016
Page 19: Scala kansai summit-2016

• 1 n

int f(int n) { int total = 0; for (int i = 1; i <= n; i++) { total += i; } return total;}

Page 20: Scala kansai summit-2016

f(1) = 1 f(2) = 1 + 2 f(3) = 1 + 2 + 3 ... f(n) = 1 + 2 + 3 + ... + n

Page 21: Scala kansai summit-2016

f(1) = 1 f(2) = f(1) + 2 f(3) = f(2) + 3 ... f(n) = f(n - 1) + n

f(1) = 1 f(n) = f(n - 1) + n

Page 22: Scala kansai summit-2016

def f(n: Int): Int = if (n == 1) 1 else f(n - 1) + n

f(1) = 1 f(n) = f(n - 1) + n

Page 23: Scala kansai summit-2016
Page 24: Scala kansai summit-2016

f(0) = 1 f(1) = 1 f(2) = 2 * 1 f(3) = 3 * 2 * 1 ... f(n) = n * ... * 3 * 2 * 1

Page 25: Scala kansai summit-2016

f(0) = 1 f(1) = 1 * f(0) f(2) = 2 * f(1) f(3) = 3 * f(2) ... f(n) = n * f(n - 1)

Page 26: Scala kansai summit-2016

f(0) = 1

f(n) = n * f(n - 1)

def f(n: Int): Int = if (n == 0) 1 else n * f(n - 1)

Page 27: Scala kansai summit-2016

n ?

1, 1, 2, 3, 5, 8, 13, …

Page 28: Scala kansai summit-2016

f(0) = 1 f(1) = 1 f(2) = 1 + 1 f(3) = 1 + 2 f(4) = 2 + 3 f(5) = 3 + 5 ...

Page 29: Scala kansai summit-2016

f(0) = 1 f(1) = 1 f(2) = f(0) + f(1) f(3) = f(1) + f(2) f(4) = f(2) + f(3) f(5) = f(3) + f(4) ... f(n) = f(n - 2) + f(n - 1)

Page 30: Scala kansai summit-2016

f(0) = 1

f(1) = 1

f(n) = f(n - 2) + f(n - 1)

def f(n: Int): Int = if (n == 0) 1 else if (n == 1) 1 else f(n - 2) + f(n - 1)

Page 31: Scala kansai summit-2016

sum

def sum(ints: List[Int]): Int

Page 32: Scala kansai summit-2016

• Nil

• head tail head :: tail

3

Nil

Nil::3 :: Nil2 ::

2 :: 3 :: Nil1 ::

• •

Page 33: Scala kansai summit-2016
Page 34: Scala kansai summit-2016

5 :: 1 :: 2 :: 8 :: Nil

Nil

Nil::8

8 :: Nil::2

2 :: 8 :: Nil::1

1 :: 2 :: 8 :: Nil::5

Page 35: Scala kansai summit-2016

sum(5 :: 1 :: 2 :: 8 :: Nil)

sum( ) = 0

sum( ) = 8 + 0

sum( ) = 2 + 8 + 0

sum( ) = 1 + 2 + 8 + 0

sum( ) = 5 + 1 + 2 + 8 + 0

Nil::8

Nil

8 :: Nil::2

2 :: 8 :: Nil::1

1 :: 2 :: 8 :: Nil::5

Page 36: Scala kansai summit-2016

sum( ) = 0

sum( ) = + sum( )

sum( ) = + sum( )

sum( ) = + sum( )

sum( ) = + sum( )

Nil::8

Nil

8 :: Nil::2

2 :: 8 :: Nil::1

1 :: 2 :: 8 :: Nil::5

Nil8

8 :: Nil2

2 :: 8 :: Nil1

5 1 :: 2 :: 8 :: Nil

Page 37: Scala kansai summit-2016

sum( ) = 0

sum( ) = + sum( )

sum( ) = + sum( )

sum( ) = + sum( )

Nil::8

Nil

8 :: Nil::2

2 :: 8 :: Nil::1

Nil8

8 :: Nil2

2 :: 8 :: Nil1

head

tail

head

tail

head

tail

head tail head :: tail

Page 38: Scala kansai summit-2016

sum(Nil) = 0sum(head :: tail) = head + sum(tail)

def sum(list: List[Int]): Int = if (list.isEmpty) 0 else list.head + sum(list.tail)

def sum(list: List[Int]): Int = list match { case Nil => 0 case head :: tail => head + sum(tail)}

Page 39: Scala kansai summit-2016

def sum(list: List[Int]): Int = list match { case Nil => 0 case head :: tail => head + sum(tail)}

def sum(list: List[Int]): Int = { def loop(acc: Int, l: List[Int]): Int = l match { case Nil => acc case head :: tail => loop(acc + head, tail) } loop(0, list)}

Page 40: Scala kansai summit-2016

product

def product(ints: List[Int]): Int

Page 41: Scala kansai summit-2016

max

def max(ints: List[Int]): Int

Page 42: Scala kansai summit-2016

reverse

def reverse(ints: List[Int]): List[Int]

Page 43: Scala kansai summit-2016

length

def length(ints: List[Int]): Int

Page 44: Scala kansai summit-2016
Page 45: Scala kansai summit-2016

• Functional Programming Principles in Scala Scala Martin Odersky

https://www.coursera.org/course/progfun

• OCaml

http://www.amazon.co.jp/dp/4781911609

Page 46: Scala kansai summit-2016

• Scala & ―Scalaz

2

http://www.amazon.co.jp/dp/4844337769

Page 47: Scala kansai summit-2016