[start] scala
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!!!
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をスペックアップしましょう