Why scala?

Embed Size (px)

Citation preview

Why Scala?

And let's take a tour of it

#1 Hanoi's Scala Meetup

11/2015

[email protected]

Ni dung

Gii thiu

Nhng nt ni bt

Hng i tng

Basic Collection

Lp trnh hm

Gii Thiu

About me

Nguyn Thanh Tng - Software Developer ti Septeni Technolgoy

Ngn ng: C, Java, C#, PHP v Scala cho hin ti

Quan tm n:Scala, Angularjs, React...

Cc kin trc phn mm

Domain Driven Design

Reactive web

Entrepreneurship

Mt ngn ng m khng nh hng n cch bn ngh v lp trnh, th n khng ng hc *Alan Perlis, nh khoa hc my tnh

*A language that doesn't affect the way you think about programming, is not worth knowing.

Thng tin s lc

Scala = Scalable Language

c Martin Odersky to ra nm 2003 ti EPFL, Thy S

c dch ra m Java Bytecode v chy trn JVM

C th ti s dng cc th vin ca Java

C php u tin s ngn gn

H tr lp trnh hng i tng ln lp trnh hm

Thng tin s lc (2)

Scala = Java's speed + Ruby's syntax

H tr tt Realtime/Reactive Web, Distributed System, Big Data vi cc th vin Future (built-in), Actor, Akka, Spark...

Cc cng ty ang s dng Scala:Apple

LinkedIn

Twitter

Foursquare

Netflix

Tumblr

...

Scala vs Java

Trang ch

http://www.scala-lang.org/

Tools & IDE

Sch ni bt

H sinh thi

Ti nguyn tham kho

Official doc: http://www.scala-lang.org/documentation/

Twitter's Scala School:https://twitter.github.io/scala_school/index.html

Coursera (Online Course):https://www.coursera.org/course/progfun

Awesome Scala:https://github.com/lauris/awesome-scala

Nt ni bt

Val vs Var

Val khai bo bin di dng Immutable = Read Only

Var khai bo bin di dng Mutable = Read + Write

Pattern Matching

Gn ging cu trc switch-case trong ngn ng khc. Tuy nhin...

Uyn chuyn khi lm vic vi Option type, Case Class thay ch dng c vi primative type nh Java, C...

Option type

L container cha 1 i tng m trong :C gi tr ~> Some(object)

Rng ~> None

L s thay th null trong Java v ngn ng khc

Kt hp c vi Pattern Matching

Closure

L cch khai bo hm m gi tr tr v c ph thuc vo bin bn ngoi scope (d khng c truyn qua i s ca hm)

Lazy val

L cch khai bo m kt qu ch tnh ton v tr v khi n c gi n

Implicit

Trnh bin dch s t ng tm kim trong ng cnh(context) thnh phn c khai bo implicit

Implicit c nhng thnh phn gm:Implicit Conversion

Implicit Parameters

Implicit (2)

Hng i tng trong Scala

H tr y OOP

Mi th trong Scala u l ObjectKhng c primitive type

Khng c cc ton t ~> tt c u l cc method

khng c static

Cy phn h

Class

Object

L mt Singleton object

Static theo cch ca Scala

Case Class

T ng sinh getter/setter cho i s

T ng nh ngha cc method hashcode, equals v copy

C th s dng trong pattern matching

Traits

Scala Traits = Java interface + Ruby's mixin

Basic Collection trong Scala

Lists & Set

Lists

SetKhng c phn t trng

Tuples

Nhm cc phn t ring l li thnh 1 tp hp

Truy cp phn t qua c php ._

C th s dng vi Pattern Matching

Map

Lu tr theo dng key value

C th lu value di dng 1 Map khc hoc 1 function

Lp trnh hm trong Scala

Higher-Order Functions

Mt function c th nhn i s l 1 function khc hoc tr v kt qu di dng 1 function

Function Currying

Trong khoa hc my tnh, currying, pht minh bi Moses Schnfinkel v Gottlob Frege, l k thut chuyn i mt function m c nhiu i s sang 1 function m ch c mt i s duy nht (cc i s khc c quy nh bi curry). - wikipediaVD:Trc:

Sau:

Function Currying (2)

ng dng thc t:Ch nh default:

Dng vi implicit:

Functional Combinators

map return li collection mi

foreachGing map nhng khng return g c

filter

zip

Functional Combinators (2)

partition

find

Functional Combinators (3)

foldLeft

foldRight

Functional Combinators (4)

reduceLeft / reduceRightGn ging fold, nhng:Khng cn khi to ban u, dng chnh phn t u tin cho vic ny (nm ra Exception nu collection rng)

VD:fold:

reduce:

Functional Combinators (5)

flattendn phng 1 nested structure

flatMapL s kt hp ca map v flatten

V:Self type

Monads

Extractor Objects

Sequence Comprehensions

Package object

cng nhiu iu khc na

Ngi ni ting ni g?

Nu ti phi la chn mt ngn ng s dng ngy nay ngoi Java, n s l Scala (1)

James Gosling, cha ngn ng Java

Ti c th thnh tht m ni rng nu mt ngi no a cho ti cun Programming in Scala ca Martin Odersky cng Lex Spoon v Bill Venners trong nm 2003 th c l ti cha bao gi to ra Groovy. (2)

James Strachan, cha ngn ng Groovy

(1) If I were to pick a language to use today other than Java, it would be Scala(2) I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 Id probably have never created Groovy.

Thank you