[start] scala

Post on 10-May-2015

6.045 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

println("Hello World!")

Do you knowObject-oriented Programming?

Do you knowFunctional

Programming?

Do you knowScala?

’’’

[Start]Scala!

@mumoshu

’’’

php

java

scala

js

python

perl

0 5 10 15

# of atnders

Categorize

Web dev

PHP, Java, ScalaGeneral Purpose

JavaPHP

Scala

Web dev

PHP, Java, ScalaGeneral Purpose

Dynamically typed

Statically typed

JavaPHP

Scala

Web dev

PHP, Java, ScalaGeneral Purpose

Dynamically typed

Statically typed

Longer code

Shorter code

JavaPHP

Scala

Scala

• has NOTHING NEW!

PHP and Scala

• PHP + Static Typing + Shorter code

= Scala ?!

Java and Scala

• Java + Shorter code

= Scala ?!

Really short?

Basic computation

• Calculate the sum in imperative style

Basic computation

• Calculate the sum in imperative style

1 + 2 + 3 = 6

Basic computation

• Calculate the sum in imperative style

1 + 2 + 3 = 6

sum = 0

sum = sum + 1sum = sum + 2

sum = sum + 3

MY Ranking

1. (Ruby)

2. Scala

3. (JavaScript)

4. PHP

5. Java

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);

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);

int[] int[] int int

Sum with PHP

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

Sum with PHP

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

$$$$$$$$

Sum with JS

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

Sum with JS

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

(‘A`) vaaaaaaaar

Sum with Ruby

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

(^o^) Elegant!

Scala + for

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

(‘-’) Is that your power?

Scala + for

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

Scala + for

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

Scala + foreach

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

Scala + foreach

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

Scala + foreach

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

Sum with `reduce`

• Calculate the sum in functional styl

Sum with `reduce`

• Calculate the sum in functional style

sum = 1 + 2 + 3

sum = 3 + 3sum = 6

Sum with `reduce`

• Calculate the sum in functional style

sum = 1 + 2 + 3

Sum with `reduce`

• Calculate the sum in functional style

1. (Ruby)

2. Scala

3. (JavaScript)

4. PHP

5. Java

Java

No reduce

PHP

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

JavaScript

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

`for` is shorter...

Ruby

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

Scala

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

(^-^)

One more thing...

More Scala

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

You learn everyday

• And you code gets BETTER

Are you

• a Java engineer?

• or maybe a PHP engineer?

• Do you use `Class’?

Class

• Define a class in

1. Scala

2. (Ruby)

3. PHP

4. Java

5. (JavaScript)

Greeter

Greeter

Hello 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();

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();?>

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();

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

Classes in Scala

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

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

Really short?

Really short?YES!!!

break1/2

http://pf.gree.jp/56616

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

Overview

Scala is

• General purpose

• Not only Web

• Multi-paradigm

• Object-oriented + Functionalprogramming

Scala

• Run on JVM

• A lot of Java libraries

• Hybrid language

• Imperative programming

• Object oriented programming

• Functional programming

’’’

Whats happy with FP

• Concurrency

• Scalability

Imperative vs Functional

• Imperative Programming

do A -> state++,

do B -> state++, ...

• Functional programming

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

+ concurrency

Easy concurrency

• Imperative programming

do A -> state <- do B

> sudden conflict!!! <

• Functional programming

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

• About type-safety

Dynamic vs Static typing

• GOOD

• Run anyway

• BAD

• More runtime errors

Dynamic typing

NullPointerException

ReferenceError

TypeError

Call to undefined function

Static typing

• GOOD

• More compile errors

• BAD

• Hard to read error messages

Scala 2.10

• We have Scala 2.9.3

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

Recommendation

• If you want to:

• write something other than Web app

• write noise-free, consise code

• develop your skill GRADUALLY

[Start]Scala!

@mumoshu

’’’

Thank you!

Our bible

Scala for business

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

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

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

Scala for education

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

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

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

Scala’s flexibility

• Scalaは自由度が高い

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

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

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

Learning Scala

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

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

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

REPL

• Scalaの対話環境

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

Scala”って言われる

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

Compilation time

• Scalaのコンパイルは長い

• Time is money

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

top related