Scala the-good-parts
-
Upload
fuqiang-wang -
Category
Technology
-
view
919 -
download
1
Transcript of Scala the-good-parts
![Page 2: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/2.jpg)
also the Simple Parts
![Page 3: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/3.jpg)
The Good Parts
Of The
Language
![Page 4: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/4.jpg)
–the guys who came from Java to Scala said
“ (I will never turn back to Java
any more)”
![Page 5: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/5.jpg)
farewell, semi-colon
![Page 6: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/6.jpg)
Type Inference
![Page 7: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/7.jpg)
类型后置+类型推导的时代
Scala
Go
Swift
u name it…
![Page 8: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/8.jpg)
expression everywhere
![Page 9: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/9.jpg)
var retVal = for{ a <- numList if a != 3; if a < 8 }yield a
for( a <- retVal){
println( "Value of a: " + a ); }
val delimiter = if(defaultDelimiter)’;’ else ‘-’;
No return any more!
![Page 10: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/10.jpg)
Combinator &
Composition
![Page 11: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/11.jpg)
Flexible Parameters
But not friendly to Javaers
![Page 12: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/12.jpg)
case class
![Page 13: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/13.jpg)
How you do it in Java Way?
![Page 14: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/14.jpg)
IDEs can help
![Page 15: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/15.jpg)
Library can helpCommons Lang
Google Guava
Lombok
![Page 16: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/16.jpg)
Let’s do it in Scala Way!
![Page 17: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/17.jpg)
tuples
![Page 18: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/18.jpg)
static Companion object
![Page 19: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/19.jpg)
special `apply` in companion object
![Page 20: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/20.jpg)
match
everything and everywhere
![Page 21: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/21.jpg)
Pattern Matching Takes Them All
![Page 22: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/22.jpg)
extractor object
unapply : Input => Optional[Output]
case class is lucky
![Page 23: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/23.jpg)
monad and container objects
![Page 24: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/24.jpg)
monad and container objectsyou have met Option, right?
But it’s more than Some or None!
![Page 25: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/25.jpg)
Monad is too academic, let’s know it in an easy way
import scala.collection._Goand Explore…
![Page 26: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/26.jpg)
function Rocks
![Page 27: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/27.jpg)
Function literals A=>B
![Page 28: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/28.jpg)
Partial Applied functions
Are NOT Partial Functions
![Page 29: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/29.jpg)
Partial Applied Functions
![Page 30: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/30.jpg)
Partial Functions
![Page 31: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/31.jpg)
Partial Function Tip
scala> val m = Map(1->2, 2->3) m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 2 -> 3)
scala> m.collect({case (k, v) if k % 2 ==0 => (k,v) }) res7: scala.collection.immutable.Map[Int,Int] = Map(2 -> 3)
scala> m collect {case (k, v) if k % 2 ==0 => (k,v) } res7: scala.collection.immutable.Map[Int,Int] = Map(2 -> 3)
![Page 32: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/32.jpg)
Curried Functions
Caution! Dark Magic
![Page 33: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/33.jpg)
high-order FunctionsTry Function
as return value
![Page 34: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/34.jpg)
How about Java8?
Both Cool~ as long as you like
![Page 35: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/35.jpg)
The Good Parts
Of The
Ecosystem
![Page 36: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/36.jpg)
REPL快速验证你的疑惑和想法
![Page 37: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/37.jpg)
The JVM Family
![Page 38: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/38.jpg)
What comes into your mind when u hear the Java word?
![Page 39: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/39.jpg)
Inter-communication
Libraries
Frameworks
Tools
![Page 40: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/40.jpg)
SBT makes build-life easier.
![Page 41: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/41.jpg)
Triggered Execution
![Page 42: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/42.jpg)
Wonderful Plugins
SBT Native Packager Plugin
sbt-assembly
sbt-dependency-graph
you favoured IDEs’ Plugins
![Page 43: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/43.jpg)
Concurrency in another way
![Page 44: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/44.jpg)
SIP14 Rocks - Futures and Promises
Composable !
![Page 45: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/45.jpg)
SIP14 Rocks - Futures and Promises
![Page 46: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/46.jpg)
Actor Model
Don’t be silly
![Page 47: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/47.jpg)
A Best Practice Of
Message Passing Concurrency
![Page 48: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/48.jpg)
Hello ActorGravityu can’t escape
![Page 49: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/49.jpg)
IoC Wisely
![Page 50: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/50.jpg)
Taming Actor
Throttling
Hibernating
Journaling
Clustering
![Page 51: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/51.jpg)
web another way
![Page 52: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/52.jpg)
URL-Oriented design
![Page 53: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/53.jpg)
route - the central hub
![Page 54: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/54.jpg)
what a route looks like
[Http Method] [path] [controller method]
GET / controllers.Application.main POST / controllers.Application.index
# Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file) GET /webjars/*file controllers.WebJarAssets.at(file)
![Page 55: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/55.jpg)
Perfect For Web API Scenarios
![Page 56: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/56.jpg)
Breaking out of Web Containers
![Page 57: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/57.jpg)
make a killing with big data
![Page 58: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/58.jpg)
do you know
DryadLINQMicrosoft does NOT always
suck
![Page 59: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/59.jpg)
from single framework to family
![Page 60: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/60.jpg)
Memory Computing enhanced with
neat DSL
![Page 61: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/61.jpg)
You know Scala Collections well, you
play with Spark well ;)
val textFile = spark.textFile("hdfs://...") val errors = textFile.filter(line => line.contains("ERROR")) errors.count() errors.filter(line => line.contains("MySQL")).count() errors.filter(line => line.contains("MySQL")).collect()
![Page 62: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/62.jpg)
Micro-batching
is not so realtime
![Page 63: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/63.jpg)
Immediately VS. Wait a moment
![Page 64: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/64.jpg)
– who said that?!
“Where the fucking awesome type system of scala?”
![Page 65: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/65.jpg)
Scala wisely
![Page 66: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/66.jpg)
扶墙老师はpuristない
![Page 67: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/67.jpg)
Find your own toolbox not ONLY a
Hammer
![Page 68: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/68.jpg)
海纳百Lang 有容乃大
Java Scala ^_-
![Page 69: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/69.jpg)
string interpolation wisely
@see also org.slf4j.helpers.MessageFormatter
![Page 70: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/70.jpg)
About Implicit
1. 如果有普遍的共识
和约定的, 可以使用;
2. 否则,不建议使用!
![Page 71: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/71.jpg)
Annotation wisely
![Page 72: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/72.jpg)
No Perfect Annotation Solution
Ugly Thing
macross
![Page 73: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/73.jpg)
enumeration wisely
or sealed trait?
![Page 74: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/74.jpg)
scala the
endpoints instead of
the Dependencies.
Standalone
![Page 75: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/75.jpg)
http://afoo.me/posts/2015-03-24-java-scala-project-type-choice-principle.html
![Page 76: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/76.jpg)
Questions?
![Page 77: Scala the-good-parts](https://reader030.fdocuments.net/reader030/viewer/2022013004/58a075be1a28ab19098b4b7d/html5/thumbnails/77.jpg)
over