Scala是基于JVM的语言。
六大特征:
1.与java无缝整合
2.类型推断
3.支持分布式和并发Actor
4.Trait特质特性
5.模式匹配match
6.高阶函数
类和对象:
当new类时,类中除了方法不执行其他都执行;object相当于java中的单例,定义的都是静态的;class可以传参,传参就有默认的构造;重写构造时,第一行要先调用默认的构造;for,(1 to 10),(1 until 10),(for(i<-1 to 10)),while... do ... while i += 1 i -= 1,if...else...
方法和函数:
1.方法的定义:def方法定义,方法中传参要指定类型,方法自己可以推断返回类型,默认将方法体中最后一行计算的结果当做返回值返回。如果要写return返回值,要显式的声明方法体的返回值类型。如果方法体可以一行搞定,可以将方法体“{。。。}”。如果方法名称和方法体之间没有“=”无论方法体返回什么值都会被丢弃,返回Unit。
2.递归方法:要显式的写出返回值类型。
3.参数有默认值的方法:def fun(x:Int=100)
4.可变长参数的方法:def fun(x:String*)
5.匿名函数:()=>{...},可以赋值给一个变量,下次调用变量就是使用的这个匿名函数。
6.偏应用函数
7.嵌套方法
8.高阶函数:函数的参数是函数,函数的返回是函数,函数的参数和返回都是函数。
9.柯里化函数:高阶函数的简化
String:就是java中的String
集合:Array,ArrayBuffer,ListBuffer,Set 可变,不可变,Map:可变,不可变,val option = map.get(key),map.keys,map.values,val value = map.get(key).getOrElse(...),map中的元素就是一个个的二元组。
List:val list = List[String](....),map,flatMap
Tuple:元组,最多支持22个元素,val iter = tuple.prducelterator,二元组中有个swap翻转,元组取值 tuple._xx
Trait:相当于java中的接口和抽象类结合。可以在Trait中定义方法实现与不实现,变量和常量都可以。Trait不可以传参。类继承trait第一个关键字使用extents,之后使用with。
模式匹配:match....case....,模式匹配中既可以匹配值,也可以匹配类型:case 123=>{...},case i:Int =>{...}。模式匹配中,从上往下匹配,匹配上了就自动终止。模式匹配过程中会有值转换。case _=>{...}什么都匹配不上最后匹配,要写到最后。模式匹配match ...case...相当于一大行。
样例类:case calss,样例类可以new也可以不new,样例类中参数,默认有getter setter方法,对外可见。
偏函数:PartialFunction[匹配的类型,匹配上传出的类型],偏函数相当于java中的switch ...case...,只能匹配相同类型。
隐式转换:隐式值与隐式参数,隐式方法,隐式类。
Actor模型:ActorModel是消息传递模型,基本特征就是消息传递;消息发送是异步的;非阻塞的,消息一旦发送成功,不能修改;Actor之间传递时,自己决定去检查消息,而不是一直等待,是异步阻塞的。