Why Scala?
And let's take a tour of it
#1 Hanoi's Scala Meetup
11/2015
TungNT
tung_nt@septeni-technology.jp
N i dungộ
● Gi i thi uớ ệ
● Nh ng nét n i b tữ ổ ậ
● H ng đ i t ngướ ố ượ
● Basic Collection
● L p trình hàmậ
Gi i Thi uớ ệ
About me
● Nguy n Thanh Tùng - Software Developer t i Septeniễ ạ
Technolgoy
● Ngôn ng : C, Java, C#, PHP vàữ Scala cho hi n t iệ ạ
● Quan tâm đ n:ế
– Scala, Angularjs, React...
– Các ki n trúc ph n m mế ầ ề
– Domain Driven Design
– Reactive web
– Entrepreneurship
M t ngôn ng mà không nh h ng đ nộ ữ ả ưở ế
cách b n nghĩ v l p trình, thì nó khôngạ ề ậ
đáng đ h c *ể ọ
Alan Perlis, nhà khoa h c máy tínhọ
*A language that doesn't affect the way you think about programming, is not worth knowing.
Thông tin s l cơ ượ
● Scala = “Scalable Language”
● Đ cượ Martin Odersky t o ra năm 2003ạ t iạ EPFL, Th yụ
Sỹ
● Đ c d ch ra mã Java Bytecode và ch y trên JVMượ ị ạ
● Có th tái s d ng các th vi n c a Javaể ử ụ ư ệ ủ
● Cú pháp u tiên s ng n g nư ự ắ ọ
● H tr l p trình h ng đ i t ng l n l p trình hàmỗ ợ ậ ướ ố ượ ẫ ậ
Thông tin s l c (2)ơ ượ
● Scala = Java's speed + Ruby's syntax
● H tr t t Realtime/Reactive Web, Distributed System, Bigỗ ợ ố
Data v i các th vi n Future (built-in), Actor, Akka, Spark...ớ ư ệ
● Các công ty đang s d ng Scala:ử ụ
– Apple
– LinkedIn
– Twitter
– Foursquare
– Netflix
– Tumblr
– ...
Scala vs Java
Trang chủ
http://www.scala-lang.org/
Tools & IDE
Sách n i b tổ ậ
H sinh tháiệ
Tài nguyên tham kh oả
● 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
Nét n i b tổ ậ
Val vs Var
● “Val” khai báo bi n d i d ng Immutable = Read Onlyế ướ ạ
● “Var” khai báo bi n d i d ng Mutable = Read + Writeế ướ ạ
Pattern Matching
● G n gi ng c u trúc switch-case trong ngôn ngầ ố ấ ữ
khác. Tuy nhiên...
● Uy n chuy n khi làm vi c v i Option type, Caseể ể ệ ớ
Class thay ch dùng đc v i primative type nhỉ ớ ư
Java, C...
Option type
● Là container ch a 1 đ i t ng mà trong đó:ứ ố ượ
– Có giá tr ~> Some(object)ị
– R ng ~> Noneỗ
● Là s thay th null trong Java và ngôn ngự ế ữ
khác
● K t h p đ c v i Pattern Matchingế ợ ượ ớ
Closure
● Là cách khai báo hàm mà giá tr tr v có phị ả ề ụ
thu c vào bi n bên ngoài scope (dù khôngộ ế
đ c truy n qua đ i s c a hàm)ượ ề ố ố ủ
Lazy val
● Là cách khai báo mà k t qu ch tính toán vàế ả ỉ
tr v khi nó đ c g i đ nả ề ượ ọ ế
Implicit
● Trình biên d ch s t đ ng tìm ki m trong ngị ẽ ự ộ ế ữ
c nh(context) thành ph n đ c khai báoả ầ ượ
implicit
● Implicit có nh ng thành ph n g m:ữ ầ ồ
– Implicit Conversion
– Implicit Parameters
Implicit (2)
H ng đ i t ng trongướ ố ượ
Scala
H tr đ y đ OOPỗ ợ ầ ủ
● M i th trong Scala đ u làọ ứ ề Object
– Không có primitive type
– Không có các toán t ~> t t c đ u là các methodử ấ ả ề
● không có static
Cây phân hệ
Class
Object
● Là m t Singleton objectộ
● Static theo cách c a Scalaủ
Case Class
● T đ ng sinh getter/setter cho đ i sự ộ ố ố
● T đ ng đ nh nghĩa các method hashcode, equals và copyự ộ ị
● Có th s d ng trong pattern matchingể ử ụ
Traits
● Scala Traits = Java interface + Ruby's mixin
Basic Collection trong
Scala
Lists & Set
● Lists
● Set
– Không có ph n t trùngầ ử
Tuples
● Nhóm các ph n t riêng l l i thành 1 t p h pầ ử ẻ ạ ậ ợ
● Truy c p ph n t qua cú pháp ._ậ ầ ử
● Có th s d ng v i Pattern Matchingể ử ụ ớ
Map
● L u tr theo d ng key – valueư ữ ạ
● Có th l u value d i d ng 1 Map khác ho c 1ể ư ướ ạ ặ
function
L p trình hàm trong Scalaậ
Higher-Order Functions
● M t function có th nh n đ i s là 1 functionộ ể ậ ố ố
khác ho c tr v k t qu d i d ng 1 functionặ ả ề ế ả ướ ạ
Function Currying
“Trong khoa h c máy tính, currying, phát minh b i Moses Schönfinkel vàọ ở
Gottlob Frege, là k thu t chuy n đ i m t function mà có nhi u đ i s sangỹ ậ ể ổ ộ ề ố ố
1 function mà ch có m t đ i s duy nh t (các đ i s khác đã đ c quy đ nhỉ ộ ố ố ấ ố ố ượ ị
b i curry).” - wikipediaở
VD:
– Tr c:ướ
– Sau:
Function Currying (2)
ng d ng th c t :Ứ ụ ự ế
– Ch đ nh default:ỉ ị
– Dùng v i implicit:ớ
Functional Combinators
● map
– return l i collection m iạ ớ
●
foreach
– Gi ng map nh ng không return gì cố ư ả
●
filter
● zip
Functional Combinators (2)
● partition
● find
Functional Combinators (3)
● foldLeft
● foldRight
Functional Combinators (4)
● reduceLeft / reduceRight
– G n gi ng fold, nh ng:ầ ố ư
● Không c n kh i t o ban đ u, dùng chính ph n t đ u tiênầ ở ạ ầ ầ ử ầ
cho vi c này (ném ra Exception n u collection r ng)ệ ế ỗ
● VD:
– fold:
– reduce:
Functional Combinators (5)
● flatten
– dàn ph ng 1 nested structureẳ
● flatMap
– Là s k t h p c a map và flattenự ế ợ ủ
Và:
– Self type
– Monads
– Extractor Objects
– Sequence Comprehensions
– Package object
– … cùng nhi u đi u khác n aề ề ữ
Ng i n i ti ng nói gì?ườ ổ ế
N u tôi ph i l a ch n m t ngôn ng đ s d ng ngày nay ngoài Java, nó s làế ả ự ọ ộ ữ ể ử ụ ẽ
Scala (1)
James Gosling, cha đ ngôn ng Javaẻ ữ
Tôi có th thành th t mà nói r ng n u m t ng i nào đó đ a cho tôi cu nể ậ ằ ế ộ ườ ư ố
“Programming in Scala” c a Martin Odersky cùng Lex Spoon và Bill Vennersủ
trong năm 2003 thì có l tôi đã ch a bao gi t o ra Groovy.ẽ ư ờ ạ (2)
James Strachan, cha đ ngôn 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 I’d probably have never created Groovy.
Thank you

Why scala?

  • 1.
    Why Scala? And let'stake a tour of it #1 Hanoi's Scala Meetup 11/2015 TungNT tung_nt@septeni-technology.jp
  • 2.
    N i dungộ ●Gi i thi uớ ệ ● Nh ng nét n i b tữ ổ ậ ● H ng đ i t ngướ ố ượ ● Basic Collection ● L p trình hàmậ
  • 3.
    Gi i Thiuớ ệ
  • 4.
    About me ● Nguyn Thanh Tùng - Software Developer t i Septeniễ ạ Technolgoy ● Ngôn ng : C, Java, C#, PHP vàữ Scala cho hi n t iệ ạ ● Quan tâm đ n:ế – Scala, Angularjs, React... – Các ki n trúc ph n m mế ầ ề – Domain Driven Design – Reactive web – Entrepreneurship
  • 5.
    M t ngônng mà không nh h ng đ nộ ữ ả ưở ế cách b n nghĩ v l p trình, thì nó khôngạ ề ậ đáng đ h c *ể ọ Alan Perlis, nhà khoa h c máy tínhọ *A language that doesn't affect the way you think about programming, is not worth knowing.
  • 6.
    Thông tin sl cơ ượ ● Scala = “Scalable Language” ● Đ cượ Martin Odersky t o ra năm 2003ạ t iạ EPFL, Th yụ Sỹ ● Đ c d ch ra mã Java Bytecode và ch y trên JVMượ ị ạ ● Có th tái s d ng các th vi n c a Javaể ử ụ ư ệ ủ ● Cú pháp u tiên s ng n g nư ự ắ ọ ● H tr l p trình h ng đ i t ng l n l p trình hàmỗ ợ ậ ướ ố ượ ẫ ậ
  • 7.
    Thông tin sl c (2)ơ ượ ● Scala = Java's speed + Ruby's syntax ● H tr t t Realtime/Reactive Web, Distributed System, Bigỗ ợ ố Data v i các th vi n Future (built-in), Actor, Akka, Spark...ớ ư ệ ● Các công ty đang s d ng Scala:ử ụ – Apple – LinkedIn – Twitter – Foursquare – Netflix – Tumblr – ...
  • 8.
  • 9.
  • 10.
  • 11.
    Sách n ib tổ ậ
  • 12.
  • 13.
    Tài nguyên thamkh oả ● 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
  • 14.
    Nét n ib tổ ậ
  • 15.
    Val vs Var ●“Val” khai báo bi n d i d ng Immutable = Read Onlyế ướ ạ ● “Var” khai báo bi n d i d ng Mutable = Read + Writeế ướ ạ
  • 16.
    Pattern Matching ● Gn gi ng c u trúc switch-case trong ngôn ngầ ố ấ ữ khác. Tuy nhiên... ● Uy n chuy n khi làm vi c v i Option type, Caseể ể ệ ớ Class thay ch dùng đc v i primative type nhỉ ớ ư Java, C...
  • 17.
    Option type ● Làcontainer ch a 1 đ i t ng mà trong đó:ứ ố ượ – Có giá tr ~> Some(object)ị – R ng ~> Noneỗ ● Là s thay th null trong Java và ngôn ngự ế ữ khác ● K t h p đ c v i Pattern Matchingế ợ ượ ớ
  • 18.
    Closure ● Là cáchkhai báo hàm mà giá tr tr v có phị ả ề ụ thu c vào bi n bên ngoài scope (dù khôngộ ế đ c truy n qua đ i s c a hàm)ượ ề ố ố ủ
  • 19.
    Lazy val ● Làcách khai báo mà k t qu ch tính toán vàế ả ỉ tr v khi nó đ c g i đ nả ề ượ ọ ế
  • 20.
    Implicit ● Trình biênd ch s t đ ng tìm ki m trong ngị ẽ ự ộ ế ữ c nh(context) thành ph n đ c khai báoả ầ ượ implicit ● Implicit có nh ng thành ph n g m:ữ ầ ồ – Implicit Conversion – Implicit Parameters
  • 21.
  • 22.
    H ng đi t ng trongướ ố ượ Scala
  • 23.
    H tr đy đ OOPỗ ợ ầ ủ ● M i th trong Scala đ u làọ ứ ề Object – Không có primitive type – Không có các toán t ~> t t c đ u là các methodử ấ ả ề ● không có static
  • 24.
  • 25.
  • 26.
    Object ● Là mt Singleton objectộ ● Static theo cách c a Scalaủ
  • 27.
    Case Class ● Tđ ng sinh getter/setter cho đ i sự ộ ố ố ● T đ ng đ nh nghĩa các method hashcode, equals và copyự ộ ị ● Có th s d ng trong pattern matchingể ử ụ
  • 28.
    Traits ● Scala Traits= Java interface + Ruby's mixin
  • 29.
  • 30.
    Lists & Set ●Lists ● Set – Không có ph n t trùngầ ử
  • 31.
    Tuples ● Nhóm cácph n t riêng l l i thành 1 t p h pầ ử ẻ ạ ậ ợ ● Truy c p ph n t qua cú pháp ._ậ ầ ử ● Có th s d ng v i Pattern Matchingể ử ụ ớ
  • 32.
    Map ● L utr theo d ng key – valueư ữ ạ ● Có th l u value d i d ng 1 Map khác ho c 1ể ư ướ ạ ặ function
  • 33.
    L p trìnhhàm trong Scalaậ
  • 34.
    Higher-Order Functions ● Mt function có th nh n đ i s là 1 functionộ ể ậ ố ố khác ho c tr v k t qu d i d ng 1 functionặ ả ề ế ả ướ ạ
  • 35.
    Function Currying “Trong khoah c máy tính, currying, phát minh b i Moses Schönfinkel vàọ ở Gottlob Frege, là k thu t chuy n đ i m t function mà có nhi u đ i s sangỹ ậ ể ổ ộ ề ố ố 1 function mà ch có m t đ i s duy nh t (các đ i s khác đã đ c quy đ nhỉ ộ ố ố ấ ố ố ượ ị b i curry).” - wikipediaở VD: – Tr c:ướ – Sau:
  • 36.
    Function Currying (2) ngd ng th c t :Ứ ụ ự ế – Ch đ nh default:ỉ ị – Dùng v i implicit:ớ
  • 37.
    Functional Combinators ● map –return l i collection m iạ ớ ● foreach – Gi ng map nh ng không return gì cố ư ả ● filter ● zip
  • 38.
  • 39.
    Functional Combinators (3) ●foldLeft ● foldRight
  • 40.
    Functional Combinators (4) ●reduceLeft / reduceRight – G n gi ng fold, nh ng:ầ ố ư ● Không c n kh i t o ban đ u, dùng chính ph n t đ u tiênầ ở ạ ầ ầ ử ầ cho vi c này (ném ra Exception n u collection r ng)ệ ế ỗ ● VD: – fold: – reduce:
  • 41.
    Functional Combinators (5) ●flatten – dàn ph ng 1 nested structureẳ ● flatMap – Là s k t h p c a map và flattenự ế ợ ủ
  • 42.
    Và: – Self type –Monads – Extractor Objects – Sequence Comprehensions – Package object – … cùng nhi u đi u khác n aề ề ữ
  • 43.
    Ng i ni ti ng nói gì?ườ ổ ế N u tôi ph i l a ch n m t ngôn ng đ s d ng ngày nay ngoài Java, nó s làế ả ự ọ ộ ữ ể ử ụ ẽ Scala (1) James Gosling, cha đ ngôn ng Javaẻ ữ Tôi có th thành th t mà nói r ng n u m t ng i nào đó đ a cho tôi cu nể ậ ằ ế ộ ườ ư ố “Programming in Scala” c a Martin Odersky cùng Lex Spoon và Bill Vennersủ trong năm 2003 thì có l tôi đã ch a bao gi t o ra Groovy.ẽ ư ờ ạ (2) James Strachan, cha đ ngôn 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 I’d probably have never created Groovy.
  • 44.