Scala
The Good Parts
@
http://afoo.me
also the SimpleParts
The
Good
Parts
Of
The
Language
–the guys who came from Java to Scala said
“
(I will never turn back to Java
any more)”
farewell, semi-colon
Type Inference
类型后置+类型推导的时代
Scala
Go
Swift
u name it…
expression everywhere
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 ‘-’;
Noreturn any more!
Combinator
&
Composition
Flexible Parameters
But not friendly to Javaers
case class
How you do it in Java Way?
IDEs can help
Library can help
Commons Lang
Google Guava
Lombok
Let’s do it in Scala Way!
tuples
static Companion object
special `apply` in companion object
match
everything and everywhere
Pattern Matching Takes Them All
extractor object
unapply : Input => Optional[Output]
case class is lucky
monad and container objects
monad and container objects
you have met Option, right?
But it’s more than Some or None!
Monad is too academic,
let’s know it in an easy way
import scala.collection._Go
and Explore…
function Rocks
Function literals A=>B
Partial Applied functions
Are NOT
Partial Functions
Partial Applied Functions
Partial
Functions
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)
Curried Functions
Caution!
Dark Magic
high-order Functions
Try Function
as return value
How about Java8?
Both Cool~
as long as you like
The
Good
Parts
Of
The
Ecosystem
REPL
快速验证你的疑惑和想法
The JVMFamily
What comes into your mind
when u hear the Java word?
Inter-communication
Libraries
Frameworks
Tools
SBTmakes build-life easier.
Triggered
Execution
Wonderful Plugins
SBT Native Packager
Plugin
sbt-assembly
sbt-dependency-graph
you favoured IDEs’ Plugins
Concurrency in another way
SIP14 Rocks - Futures and Promises
Composable !
SIP14 Rocks - Futures and Promises
Actor Model
Don’t be silly
A Best Practice Of
Message Passing Concurrency
Hello Actor
Gravity

u can’t escape
IoCWisely
Taming Actor
Throttling
Hibernating
Journaling
Clustering
web another way
URL-Oriented design
route - the central hub
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)
Perfect For Web APIScenarios
Breakingout of Web Containers
make a killing with big data
do you know
DryadLINQ
Microsoftdoes NOT always
suck
from single framework to family
Memory Computing
enhanced with
neat DSL
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()
Micro-batching
is not sorealtime
ImmediatelyVS. Wait a moment
– who said that?!
“Where the fucking awesome
type system of scala?”
Scala
wisely
扶墙老师はpuristない
Find your own toolbox
not ONLY a
Hammer
海纳百Lang
有容乃大
Java Scala ^_-
string interpolation wisely
@see also org.slf4j.helpers.MessageFormatter
About Implicit
1. 如果有普遍的共识
和约定的, 可以使用;
2. 否则,不建议使用!
Annotation wisely
No Perfect Annotation Solution
UglyThing
macross
enumeration wisely
or sealed trait?
scala
the
endpoints
instead of
the
Dependencies.
Standalone
http://afoo.me/posts/2015-03-24-java-scala-project-type-choice-principle.html
Questions?
over

Scala the-good-parts