Slide 1

Slide 1 text

Introduction Scala BrianHsu @ TWJUG

Slide 2

Slide 2 text

關於我

Slide 3

Slide 3 text

http://bone.twbbs.org.tw/blog/ 墳墓 (BrianHsu)

Slide 4

Slide 4 text

其實我不懂 Scala

Slide 5

Slide 5 text

Scala 非常難

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

我只會簡單的部份 但我用得很高興!

Slide 9

Slide 9 text

特別是拿來當 Script Language

Slide 10

Slide 10 text

工欲善其事 必先利其器

Slide 11

Slide 11 text

所有的武林高手 都有趁手的兵刃

Slide 12

Slide 12 text

程式員的兵器 程式語言

Slide 13

Slide 13 text

我的個性

Slide 14

Slide 14 text

粗心、懶

Slide 15

Slide 15 text

所以 我的兵器在哪?

Slide 16

Slide 16 text

動態語言

Slide 17

Slide 17 text

3P 好好玩 Python/Perl/PHP

Slide 18

Slide 18 text

後起之秀 Ruby

Slide 19

Slide 19 text

因為粗心

Slide 20

Slide 20 text

討厭執行期爆炸 def boom puts "Hello World" end puts " 一個小小的 typo" booom

Slide 21

Slide 21 text

對不起,我是懦夫 我不敢用這些語言

Slide 22

Slide 22 text

靜態語言

Slide 23

Slide 23 text

真男人就是要冠 C C 語言

Slide 24

Slide 24 text

D 語言 Haskell

Slide 25

Slide 25 text

我們最愛的 Java Programming Langauge

Slide 26

Slide 26 text

我們最恨的 Java Programming Langauge

Slide 27

Slide 27 text

因為懶

Slide 28

Slide 28 text

public static void main (String [] args) { System.out.println(“Hello World”) }

Slide 29

Slide 29 text

public static void main (String [] args) { System.out.println(“Hello World”) } 浪費生命!

Slide 30

Slide 30 text

println ("Hello World")

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

What is Scala?

Slide 33

Slide 33 text

樓 梯

Slide 34

Slide 34 text

A Postfunctional Programming Language on Java Virtual Machine

Slide 35

Slide 35 text

Compile to JVM .class Byte Code

Slide 36

Slide 36 text

理論上 Full Java Interoperability

Slide 37

Slide 37 text

What is Scala?

Slide 38

Slide 38 text

A Scalable Language

Slide 39

Slide 39 text

會隨 User 變形的程式語言

Slide 40

Slide 40 text

A Scalable Language

Slide 41

Slide 41 text

A Scalable Language

Slide 42

Slide 42 text

Why Scala?

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

三個願望一次滿足

Slide 45

Slide 45 text

REPL Scripting Compiling

Slide 46

Slide 46 text

REPL

Slide 47

Slide 47 text

Scripting

Slide 48

Slide 48 text

Compiling

Slide 49

Slide 49 text

三個願望一次滿足

Slide 50

Slide 50 text

Procedure Object Oriented Functional

Slide 51

Slide 51 text

Procedure Programming

Slide 52

Slide 52 text

Object Oriented Programming

Slide 53

Slide 53 text

Functional Programming

Slide 54

Slide 54 text

三個願望一次滿足

Slide 55

Slide 55 text

Concise Static Typing Duck Typing

Slide 56

Slide 56 text

Concise (Ruby)

Slide 57

Slide 57 text

Concise (Scala)

Slide 58

Slide 58 text

Static Typing (Ruby)

Slide 59

Slide 59 text

Static Typing (Scala)

Slide 60

Slide 60 text

真、 Duck Typing (Ruby)

Slide 61

Slide 61 text

偽‧ Duck Typing (Scala)

Slide 62

Slide 62 text

結論

Slide 63

Slide 63 text

有 Scala 、無懦夫

Slide 64

Slide 64 text

Scala vs Java

Slide 65

Slide 65 text

Scala compared to Java Scala adds Scala removes + a pure object system - static members + operator overloading - primitive types + closures - break, continue + mixin composition with traits - special treatment of interfaces + existential types - wildcards + abstract types - raw types + pattern matching - enums Modeled in libraries: assert, enums, properties, events, actors, using, queries, …

Slide 66

Slide 66 text

Scala cheat sheet (1): Definitions Scala method definitions: def fun(x: Int): Int = { result } def fun = result Scala variable definitions: var x: Int = expression val x: String = expression Java method definition: int fun(int x) { return result } (no parameterless methods) Java variable definitions: int x = expression final String x = expression

Slide 67

Slide 67 text

Scala cheat sheet (2): Expressions Scala method calls: obj.meth(arg) obj meth arg Scala choice expressions: if (cond) expr1 else expr2 expr match { case pat 1 => expr 1 .... case pat n => expr n } Java method call: obj.meth(arg) (no operator overloading) Java choice expressions, stmts: cond ? expr1 : expr2 if (cond) return expr1; else return expr2; switch (expr) { case pat 1 : return expr 1 ; ... case pat n : return expr n ; } // statement only

Slide 68

Slide 68 text

Scala cheat sheet (3): Objects and Classes Scala Class and Object class Sample(x: Int, val p: Int) { def instMeth(y: Int) = x + y } object Sample { def staticMeth(x: Int, y: Int) = x * y } Java Class with statics class Sample { private final int x; public final int p; Sample(int x, int p) { this.x = x; this.p = p; } int instMeth(int y) { return x + y; } static int staticMeth(int x, int y) { return x * y; } }

Slide 69

Slide 69 text

Scala cheat sheet (4): Traits Scala Trait trait T { def abstractMth(x: String): Int def concreteMth(x: String) = x + field var field = “!” } Scala mixin composition: class C extends Super with T Java Interface interface T { int abstractMth(String x) } (no concrete methods) (no fields) Java extension + implementation: class C extends Super implements T

Slide 70

Slide 70 text

Scala 的特異功能

Slide 71

Slide 71 text

這次沒唬你 萬物皆物件

Slide 72

Slide 72 text

你可以這樣 1.toString

Slide 73

Slide 73 text

我們都知道 toString 是 Method

Slide 74

Slide 74 text

1+1 + 也是 Method !

Slide 75

Slide 75 text

1+2 = 1 .+ (2)

Slide 76

Slide 76 text

向 static 說再見 預設的 Singleton

Slide 77

Slide 77 text

List.range(1, 5) = List(1,2,3,4,5)

Slide 78

Slide 78 text

List 是 class range 是 class method

Slide 79

Slide 79 text

Slide 80

Slide 80 text

List 是一個 Singleton 物件!

Slide 81

Slide 81 text

range(1,2) 是一個 instance method

Slide 82

Slide 82 text

只有一個 唯一的 List 物件

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

懶人的好幫手之一 Tuple

Slide 85

Slide 85 text

簡單資料結構

Slide 86

Slide 86 text

座標 鍵值

Slide 87

Slide 87 text

No content

Slide 88

Slide 88 text

懶人的好幫手之二 case calss

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

加強版的 swtich Pattern Matching

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

加強版(幾乎沒在用)的 FOR expression

Slide 96

Slide 96 text

No content

Slide 97

Slide 97 text

建忘的救星 (2.8.0 才有喔! ) Default / Named Arguments

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

Function Programming Function Literal

Slide 100

Slide 100 text

Function Programming Closure

Slide 101

Slide 101 text

Function Programming High-Order Function

Slide 102

Slide 102 text

No content

Slide 103

Slide 103 text

Lazy

Slide 104

Slide 104 text

No content

Slide 105

Slide 105 text

可以有實作的 Interface Trait

Slide 106

Slide 106 text

No content

Slide 107

Slide 107 text

等等,這是孔明的陷阱!

Slide 108

Slide 108 text

Scala 的限制與臭蟲 ● 限制 ● Cannot acess static protected Java field. – 對不起, Google Maps API 用到了。 ● 臭蟲 ● Static Java Inner class 造成 classfile borken / missing dependcy – Google Maps API 踩到地雷了 – Fixed in latest SVN trunk ● 解決方式 ● 用 Java 寫個 Wrapper 唄 Missing dependency

Slide 109

Slide 109 text

Thanks!