Contenu connexe Similaire à Learn Scala Fundamentals Similaire à Learn Scala Fundamentals (20) Learn Scala Fundamentals10. PHP, Java, Scala
Web dev General Purpose
Shorter code
Dynamically Statically typed
typed Scala
Longer code
PHP Java
17. Basic computation
• Calculate the sum in imperative style
1 + 2 + 3 = 6
sum = 0
sum = sum + 1
sum = sum + 2
sum = sum + 3
19. 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);
20. 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);
22. Sum with PHP
$array = array(1, 2, 3);
$sum = 0;
for ($i=1; $i<=count($array); $i++) {
$sum += $array[$i];
}
print $sum;
23. Sum with PHP
$array = array(1, 2, 3);
$sum = 0;
for ($i=1; $i<=count($array); $i++) {
$sum += $array[$i];
}
print($sum);
25. Sum with JS
var array = [1,2,3]
var sum = 0
for (var i in array) {
sum += array[i]
}
console.log(sum);
26. Sum with JS
var array = [1,2,3]
var sum = 0
for (var i in array) {
sum += array[i]
}
console.log(sum);
30. Scala + for
var array = Array(1, 2, 3)
var sum = 0
for (x <- array) {
sum += x
}
println(sum)
32. Scala + for
var array = Array(1, 2, 3)
var sum = 0
for (x <- array) {
sum += x
}
println(sum)
33. Scala + for
var array = Array(1, 2, 3)
var sum = 0
for (x <- array) {
sum += x
}
println(sum)
34. Scala + foreach
var array = Array(1, 2, 3)
var sum = 0
array foreach { x =>
sum += x
}
println(sum)
35. Scala + foreach
var array = Array(1, 2, 3)
var sum = 0
array foreach { x =>
sum += x
}
println(sum)
36. Scala + foreach
var array = Array(1, 2, 3)
var sum = 0
array foreach {
sum += _
}
println(sum)
38. Sum with `reduce`
• Calculate the sum in functional style
sum = 1 + 2 + 3
sum = 3 + 3
sum = 6
40. Sum with `reduce`
• Calculate the sum in functional style
1. (Ruby)
2. Scala
3. (JavaScript)
4. PHP
5. Java
42. PHP
$array = array(1, 2, 3);
function reduce($a, $b){
return $a + $b;
};
$sum = array_reduce($array, 'reduce');
print $sum;
43. JavaScript
var array = [1, 2, 3];
var sum = array.reduce(function(a,b){
return a + b
});
console.log(sum);
51. Are you
• a Java engineer?
• or maybe a PHP engineer?
• Do you use `Class’?
52. Class
• Define a class in
1. Scala
2. (Ruby)
3. PHP
4. Java
5. (JavaScript)
54. 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();
55. Classes in PHP
<?php
class 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();
?>
56. Classes in JS
function 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();
57. Classes in Ruby
class Greeter
attr_reader :name
def initialize(name="Scala")
@name = name
end
def greet
puts “Hello “ + @name
end
end
greeter = Greeter.new(“Scala”)
greeter.greet
58. Classes in Scala
class Greeter(val name: String = “Scala”) {
def greet() {
println(“Hello “ + name)
}
}
val greeter = new Greeter("Scala!");
greeter.greet()
61. break
1/2
ビースト★ハーレム
∼野獣の甘噛み∼
http://pf.gree.jp/56616
63. Scala is
• General purpose
• Not only Web
• Multi-paradigm
• Object-oriented + Functional
programming
64. Scala
’’’
• Run on JVM
• A lot of Java libraries
• Hybrid language
• Imperative programming
• Object oriented programming
• Functional programming
66. Imperative vs
Functional
• Imperative Programming
do A -> state++,
do B -> state++, ...
• Functional programming
in1 -> f(x) -> out1
in2 -> g(x) -> out2
68. Easy concurrency
• Imperative programming
do A -> state <- do B
> sudden conflict!!! <
• Functional programming
in1 -> f(x) -> out1, in2 -> g(x) -> out2
> no conflict!!! <
75. Static typing
• GOOD
• More compile errors
• BAD
• Hard to read error messages
76. Scala 2.10
• We have Scala 2.9.3
• Scala 2.10 is coming (on 12/26?)
77. Recommendation
• If you want to:
• write something other than Web app
• write noise-free, consise code
• develop your skill GRADUALLY
82. Scala for education
• ステップアップ学習に最適
• sumの例のように、Scalaに慣れてくる
と徐々に簡潔な書き方が出来るよう
になっていく
• 手続き的に書ける。慣れたらいつで
も関数型チックに書ける。
83. Scala’s flexibility
• Scalaは自由度が高い
• 同じ意味のことを幾通りにも書けて
メンテナンス性が悪い、のではない
• 各人のレベルにあった記述ができる
• プログラマの創造性を阻害しない
84. Learning Scala
• Javaと同じ書き方でいいなら、Javaと同じ学
習コスト
• ちょっと短いだけのJavaとして書けるので
• Web開発ならPHPの方が最初の敷居が低い
85. REPL
• Scalaの対話環境
• ScalaのREPLを起動すると”Welcome to
Scala”って言われる
• 「ようこそScalaへ。ご命令を。」って
言ってくれるScalaかわいい