[start] scala

86
println("Hello World!")

Upload: yusuke-kuoka

Post on 10-May-2015

6.045 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: [Start] Scala

println("Hello World!")

Page 2: [Start] Scala

Do you knowObject-oriented Programming?

Page 3: [Start] Scala

Do you knowFunctional

Programming?

Page 4: [Start] Scala

Do you knowScala?

’’’

Page 5: [Start] Scala

[Start]Scala!

@mumoshu

’’’

Page 6: [Start] Scala

php

java

scala

js

python

perl

0 5 10 15

# of atnders

Page 7: [Start] Scala

Categorize

Page 8: [Start] Scala

Web dev

PHP, Java, ScalaGeneral Purpose

JavaPHP

Scala

Page 9: [Start] Scala

Web dev

PHP, Java, ScalaGeneral Purpose

Dynamically typed

Statically typed

JavaPHP

Scala

Page 10: [Start] Scala

Web dev

PHP, Java, ScalaGeneral Purpose

Dynamically typed

Statically typed

Longer code

Shorter code

JavaPHP

Scala

Page 11: [Start] Scala

Scala

• has NOTHING NEW!

Page 12: [Start] Scala

PHP and Scala

• PHP + Static Typing + Shorter code

= Scala ?!

Page 13: [Start] Scala

Java and Scala

• Java + Shorter code

= Scala ?!

Page 14: [Start] Scala

Really short?

Page 15: [Start] Scala

Basic computation

• Calculate the sum in imperative style

Page 16: [Start] Scala

Basic computation

• Calculate the sum in imperative style

1 + 2 + 3 = 6

Page 17: [Start] Scala

Basic computation

• Calculate the sum in imperative style

1 + 2 + 3 = 6

sum = 0

sum = sum + 1sum = sum + 2

sum = sum + 3

Page 18: [Start] Scala

MY Ranking

1. (Ruby)

2. Scala

3. (JavaScript)

4. PHP

5. Java

Page 19: [Start] Scala

Sum with Java

int[] array = new int[] { 1, 2, 3 };int sum = 0;for (int i=0; i<array.length; i++) {  sum += array[i];}System.out.println(sum);

Page 20: [Start] Scala

Sum with Java

int[] array = new int[] { 1, 2, 3 };int sum = 0;for (int i=0; i<array.length; i++) {  sum += array[i];}System.out.println(sum);

Page 21: [Start] Scala

int[] int[] int int

Page 22: [Start] Scala

Sum with PHP

$array = array(1, 2, 3);$sum = 0;for ($i=1; $i<=count($array); $i++) {    $sum += $array[$i];}print $sum;

Page 23: [Start] Scala

Sum with PHP

$array = array(1, 2, 3);$sum = 0;for ($i=1; $i<=count($array); $i++) {    $sum += $array[$i];}print($sum);

Page 24: [Start] Scala

$$$$$$$$

Page 25: [Start] Scala

Sum with JS

var array = [1,2,3]var sum = 0for (var i in array) { sum += array[i]}console.log(sum);

Page 26: [Start] Scala

Sum with JS

var array = [1,2,3]var sum = 0for (var i in array) { sum += array[i]}console.log(sum);

Page 27: [Start] Scala

(‘A`) vaaaaaaaar

Page 28: [Start] Scala

Sum with Ruby

array = [1, 2, 3]sum = 0for (x in array) sum += xendputs sum

Page 29: [Start] Scala

(^o^) Elegant!

Page 30: [Start] Scala

Scala + for

var array = Array(1, 2, 3)var sum = 0for (x <- array) {  sum += x}println(sum)

Page 31: [Start] Scala

(‘-’) Is that your power?

Page 32: [Start] Scala

Scala + for

var array = Array(1, 2, 3)var sum = 0for (x <- array) {  sum += x}println(sum)

Page 33: [Start] Scala

Scala + for

var array = Array(1, 2, 3)var sum = 0for (x <- array) {  sum += x}println(sum)

Page 34: [Start] Scala

Scala + foreach

var array = Array(1, 2, 3)var sum = 0array foreach { x =>  sum += x}println(sum)

Page 35: [Start] Scala

Scala + foreach

var array = Array(1, 2, 3)var sum = 0array foreach { x =>  sum += x}println(sum)

Page 36: [Start] Scala

Scala + foreach

var array = Array(1, 2, 3)var sum = 0array foreach { sum += _}println(sum)

Page 37: [Start] Scala

Sum with `reduce`

• Calculate the sum in functional styl

Page 38: [Start] Scala

Sum with `reduce`

• Calculate the sum in functional style

sum = 1 + 2 + 3

sum = 3 + 3sum = 6

Page 39: [Start] Scala

Sum with `reduce`

• Calculate the sum in functional style

sum = 1 + 2 + 3

Page 40: [Start] Scala

Sum with `reduce`

• Calculate the sum in functional style

1. (Ruby)

2. Scala

3. (JavaScript)

4. PHP

5. Java

Page 41: [Start] Scala

Java

No reduce

Page 42: [Start] Scala

PHP

$array = array(1, 2, 3);function reduce($a, $b){ return $a + $b;};$sum = array_reduce($array, 'reduce');print $sum;

Page 43: [Start] Scala

JavaScript

var array = [1, 2, 3];var sum = array.reduce(function(a,b){ return a + b});console.log(sum);

Page 44: [Start] Scala

`for` is shorter...

Page 45: [Start] Scala

Ruby

array = [1, 2, 3]sum = array.reduce(&:+)puts sum

Page 46: [Start] Scala

Scala

val array = Array(1, 2, 3)val sum = array.reduce(_+_)println(sum)

Page 47: [Start] Scala

(^-^)

Page 48: [Start] Scala

One more thing...

Page 49: [Start] Scala

More Scala

val array = Array(1, 2, 3)val sum = array.sumprintln(sum)

Page 50: [Start] Scala

You learn everyday

• And you code gets BETTER

Page 51: [Start] Scala

Are you

• a Java engineer?

• or maybe a PHP engineer?

• Do you use `Class’?

Page 52: [Start] Scala

Class

• Define a class in

1. Scala

2. (Ruby)

3. PHP

4. Java

5. (JavaScript)

Page 53: [Start] Scala

Greeter

Greeter

Hello Scala

Page 54: [Start] Scala

Classes in Java

public class Greeter { private String name; public Greeter(String name) { this.name = name; }

public Greeter() { Greeter(“Scala”); }

public String getName() { return this.name; }

public void greet() { System.out.println(“Hello “ + this.name); }}

Greeter greeter = new Greeter("Scala!");greeter.greet();

Page 55: [Start] Scala

Classes in PHP<?phpclass Greeter { private $name; function __construct($name = 'Scala') { $this->name = $name; }

public function getName() { return $this->name; }

public function greet() { print ‘Hello ‘ . $this->name; }}

$greeter = new Greeter(‘Scala!’);$greeter->greet();?>

Page 56: [Start] Scala

Classes in JSfunction Greeter(name) { this.name = typeof name == “undefined” ? “Scala” : name;}

Greeter.prototype = { getName: function() { return this.name; }, greet: function() { console.log(“Hello “ + this.name); }};

var greeter = new Greeter(“Scala”);greeter.greet();

Page 57: [Start] Scala

Classes in Rubyclass Greeter attr_reader :name def initialize(name="Scala") @name = name end def greet puts “Hello “ + @name endend

greeter = Greeter.new(“Scala”)greeter.greet

Page 58: [Start] Scala

Classes in Scala

class Greeter(val name: String = “Scala”) { def greet() { println(“Hello “ + name) }}

val greeter = new Greeter("Scala!");greeter.greet()

Page 59: [Start] Scala

Really short?

Page 60: [Start] Scala

Really short?YES!!!

Page 61: [Start] Scala

break1/2

http://pf.gree.jp/56616

 ビースト★ハーレム~野獣の甘噛み~

Page 62: [Start] Scala

Overview

Page 63: [Start] Scala

Scala is

• General purpose

• Not only Web

• Multi-paradigm

• Object-oriented + Functionalprogramming

Page 64: [Start] Scala

Scala

• Run on JVM

• A lot of Java libraries

• Hybrid language

• Imperative programming

• Object oriented programming

• Functional programming

’’’

Page 65: [Start] Scala

Whats happy with FP

• Concurrency

• Scalability

Page 66: [Start] Scala

Imperative vs Functional

• Imperative Programming

do A -> state++,

do B -> state++, ...

• Functional programming

in1 -> f(x) -> out1in2 -> g(x) -> out2

Page 67: [Start] Scala

+ concurrency

Page 68: [Start] Scala

Easy concurrency

• Imperative programming

do A -> state <- do B

> sudden conflict!!! <

• Functional programming

in1 -> f(x) -> out1, in2 -> g(x) -> out2 > no conflict!!! <

Page 69: [Start] Scala

• About type-safety

Dynamic vs Static typing

Page 70: [Start] Scala

• GOOD

• Run anyway

• BAD

• More runtime errors

Dynamic typing

Page 71: [Start] Scala

NullPointerException

Page 72: [Start] Scala

ReferenceError

Page 73: [Start] Scala

TypeError

Page 74: [Start] Scala

Call to undefined function

Page 75: [Start] Scala

Static typing

• GOOD

• More compile errors

• BAD

• Hard to read error messages

Page 76: [Start] Scala

Scala 2.10

• We have Scala 2.9.3

• Scala 2.10 is coming (on 12/26?)

Page 77: [Start] Scala

Recommendation

• If you want to:

• write something other than Web app

• write noise-free, consise code

• develop your skill GRADUALLY

Page 78: [Start] Scala

[Start]Scala!

@mumoshu

’’’

Page 79: [Start] Scala

Thank you!

Page 80: [Start] Scala

Our bible

Page 81: [Start] Scala

Scala for business

• Scalaはお仕事に向いてます

• Java同様、静的型付けは複数人での開発に有効

• Scalaはエンジニアの成長を止めない

Page 82: [Start] Scala

Scala for education

• ステップアップ学習に最適

• sumの例のように、Scalaに慣れてくると徐々に簡潔な書き方が出来るようになっていく

• 手続き的に書ける。慣れたらいつでも関数型チックに書ける。

Page 83: [Start] Scala

Scala’s flexibility

• Scalaは自由度が高い

• 同じ意味のことを幾通りにも書けてメンテナンス性が悪い、のではない

• 各人のレベルにあった記述ができる

• プログラマの創造性を阻害しない

Page 84: [Start] Scala

Learning Scala

• Javaと同じ書き方でいいなら、Javaと同じ学習コスト

• ちょっと短いだけのJavaとして書けるので

• Web開発ならPHPの方が最初の敷居が低い

Page 85: [Start] Scala

REPL

• Scalaの対話環境

• ScalaのREPLを起動すると”Welcome to

Scala”って言われる

• 「ようこそScalaへ。ご命令を。」って言ってくれるScalaかわいい

Page 86: [Start] Scala

Compilation time

• Scalaのコンパイルは長い

• Time is money

• PCをスペックアップしましょう