[start] scala
TRANSCRIPT
![Page 1: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/1.jpg)
println("Hello World!")
![Page 2: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/2.jpg)
Do you knowObject-oriented Programming?
![Page 3: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/3.jpg)
Do you knowFunctional
Programming?
![Page 4: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/4.jpg)
Do you knowScala?
’’’
![Page 5: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/5.jpg)
[Start]Scala!
@mumoshu
’’’
![Page 6: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/6.jpg)
php
java
scala
js
python
perl
0 5 10 15
# of atnders
![Page 7: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/7.jpg)
Categorize
![Page 8: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/8.jpg)
Web dev
PHP, Java, ScalaGeneral Purpose
JavaPHP
Scala
![Page 9: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/9.jpg)
Web dev
PHP, Java, ScalaGeneral Purpose
Dynamically typed
Statically typed
JavaPHP
Scala
![Page 10: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/10.jpg)
Web dev
PHP, Java, ScalaGeneral Purpose
Dynamically typed
Statically typed
Longer code
Shorter code
JavaPHP
Scala
![Page 11: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/11.jpg)
Scala
• has NOTHING NEW!
![Page 12: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/12.jpg)
PHP and Scala
• PHP + Static Typing + Shorter code
= Scala ?!
![Page 13: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/13.jpg)
Java and Scala
• Java + Shorter code
= Scala ?!
![Page 14: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/14.jpg)
Really short?
![Page 15: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/15.jpg)
Basic computation
• Calculate the sum in imperative style
![Page 16: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/16.jpg)
Basic computation
• Calculate the sum in imperative style
1 + 2 + 3 = 6
![Page 17: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/18.jpg)
MY Ranking
1. (Ruby)
2. Scala
3. (JavaScript)
4. PHP
5. Java
![Page 19: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/21.jpg)
int[] int[] int int
![Page 22: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/24.jpg)
$$$$$$$$
![Page 25: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/27.jpg)
(‘A`) vaaaaaaaar
![Page 28: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/28.jpg)
Sum with Ruby
array = [1, 2, 3]sum = 0for (x in array) sum += xendputs sum
![Page 29: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/29.jpg)
(^o^) Elegant!
![Page 30: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/30.jpg)
Scala + for
var array = Array(1, 2, 3)var sum = 0for (x <- array) { sum += x}println(sum)
![Page 31: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/31.jpg)
(‘-’) Is that your power?
![Page 32: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/32.jpg)
Scala + for
var array = Array(1, 2, 3)var sum = 0for (x <- array) { sum += x}println(sum)
![Page 33: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/33.jpg)
Scala + for
var array = Array(1, 2, 3)var sum = 0for (x <- array) { sum += x}println(sum)
![Page 34: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/34.jpg)
Scala + foreach
var array = Array(1, 2, 3)var sum = 0array foreach { x => sum += x}println(sum)
![Page 35: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/35.jpg)
Scala + foreach
var array = Array(1, 2, 3)var sum = 0array foreach { x => sum += x}println(sum)
![Page 36: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/36.jpg)
Scala + foreach
var array = Array(1, 2, 3)var sum = 0array foreach { sum += _}println(sum)
![Page 37: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/37.jpg)
Sum with `reduce`
• Calculate the sum in functional styl
![Page 38: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/38.jpg)
Sum with `reduce`
• Calculate the sum in functional style
sum = 1 + 2 + 3
sum = 3 + 3sum = 6
![Page 39: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/39.jpg)
Sum with `reduce`
• Calculate the sum in functional style
sum = 1 + 2 + 3
![Page 40: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/40.jpg)
Sum with `reduce`
• Calculate the sum in functional style
1. (Ruby)
2. Scala
3. (JavaScript)
4. PHP
5. Java
![Page 41: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/41.jpg)
Java
No reduce
![Page 42: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/42.jpg)
PHP
$array = array(1, 2, 3);function reduce($a, $b){ return $a + $b;};$sum = array_reduce($array, 'reduce');print $sum;
![Page 43: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/43.jpg)
JavaScript
var array = [1, 2, 3];var sum = array.reduce(function(a,b){ return a + b});console.log(sum);
![Page 44: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/44.jpg)
`for` is shorter...
![Page 45: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/45.jpg)
Ruby
array = [1, 2, 3]sum = array.reduce(&:+)puts sum
![Page 46: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/46.jpg)
Scala
val array = Array(1, 2, 3)val sum = array.reduce(_+_)println(sum)
![Page 47: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/47.jpg)
(^-^)
![Page 48: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/48.jpg)
One more thing...
![Page 49: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/49.jpg)
More Scala
val array = Array(1, 2, 3)val sum = array.sumprintln(sum)
![Page 50: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/50.jpg)
You learn everyday
• And you code gets BETTER
![Page 51: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/51.jpg)
Are you
• a Java engineer?
• or maybe a PHP engineer?
• Do you use `Class’?
![Page 52: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/52.jpg)
Class
• Define a class in
1. Scala
2. (Ruby)
3. PHP
4. Java
5. (JavaScript)
![Page 53: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/53.jpg)
Greeter
Greeter
Hello Scala
![Page 54: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/59.jpg)
Really short?
![Page 60: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/60.jpg)
Really short?YES!!!
![Page 62: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/62.jpg)
Overview
![Page 63: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/63.jpg)
Scala is
• General purpose
• Not only Web
• Multi-paradigm
• Object-oriented + Functionalprogramming
![Page 64: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/64.jpg)
Scala
• Run on JVM
• A lot of Java libraries
• Hybrid language
• Imperative programming
• Object oriented programming
• Functional programming
’’’
![Page 65: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/65.jpg)
Whats happy with FP
• Concurrency
• Scalability
![Page 66: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/66.jpg)
Imperative vs Functional
• Imperative Programming
do A -> state++,
do B -> state++, ...
• Functional programming
in1 -> f(x) -> out1in2 -> g(x) -> out2
![Page 67: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/67.jpg)
+ concurrency
![Page 68: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/68.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/69.jpg)
• About type-safety
Dynamic vs Static typing
![Page 70: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/70.jpg)
• GOOD
• Run anyway
• BAD
• More runtime errors
Dynamic typing
![Page 71: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/71.jpg)
NullPointerException
![Page 72: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/72.jpg)
ReferenceError
![Page 73: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/73.jpg)
TypeError
![Page 74: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/74.jpg)
Call to undefined function
![Page 75: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/75.jpg)
Static typing
• GOOD
• More compile errors
• BAD
• Hard to read error messages
![Page 76: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/76.jpg)
Scala 2.10
• We have Scala 2.9.3
• Scala 2.10 is coming (on 12/26?)
![Page 77: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/77.jpg)
Recommendation
• If you want to:
• write something other than Web app
• write noise-free, consise code
• develop your skill GRADUALLY
![Page 78: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/78.jpg)
[Start]Scala!
@mumoshu
’’’
![Page 79: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/79.jpg)
Thank you!
![Page 80: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/80.jpg)
Our bible
![Page 81: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/81.jpg)
Scala for business
• Scalaはお仕事に向いてます
• Java同様、静的型付けは複数人での開発に有効
• Scalaはエンジニアの成長を止めない
![Page 82: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/82.jpg)
Scala for education
• ステップアップ学習に最適
• sumの例のように、Scalaに慣れてくると徐々に簡潔な書き方が出来るようになっていく
• 手続き的に書ける。慣れたらいつでも関数型チックに書ける。
![Page 83: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/83.jpg)
Scala’s flexibility
• Scalaは自由度が高い
• 同じ意味のことを幾通りにも書けてメンテナンス性が悪い、のではない
• 各人のレベルにあった記述ができる
• プログラマの創造性を阻害しない
![Page 84: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/84.jpg)
Learning Scala
• Javaと同じ書き方でいいなら、Javaと同じ学習コスト
• ちょっと短いだけのJavaとして書けるので
• Web開発ならPHPの方が最初の敷居が低い
![Page 85: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/85.jpg)
REPL
• Scalaの対話環境
• ScalaのREPLを起動すると”Welcome to
Scala”って言われる
• 「ようこそScalaへ。ご命令を。」って言ってくれるScalaかわいい
![Page 86: [Start] Scala](https://reader033.vdocuments.mx/reader033/viewer/2022052301/554f571fb4c905b9508b515a/html5/thumbnails/86.jpg)
Compilation time
• Scalaのコンパイルは長い
• Time is money
• PCをスペックアップしましょう