概述:
2、基于JVM运行,和Java集成度很高,被直接编译为Java字节码3、函数式编程、模式匹配、隐式转换
scala语言特性:
快速实验: Scala有交互式命令行(REPL),可以在上面快速的试各种语法和代码。这对学习新特性,或者实验新想法非常有用。
一致性: 尽管Scala融合了静态类型系统、面向对象、函数式编程等语言特性,但却很少能看出融合的痕迹。Scala是我见到融合最多语言特性而又不显得杂乱的编程语言之一。
类型安全: Scala创始人是教授,他先带领创建了java5编译器,而后觉得Java有太多羁绊而发明了Scala。Scala编译器和类型系统非常强大,它的目标是尽量把软件错误消灭在编写过程中。Scala类型系统是图灵完备的,甚至可以在编译期间解决问题。
面向对象: Scala是面向对象的编程语言,所有的变量和方法都封装在对象中,可以把信息封装起来供外部使用。
函数式编程: Scala同时又是函数式编程语言,函数可以独立存在,可以定义一个函数作为另一个函数的返回值,也可以接受函数作为函数的参数。这给组合函数带来了很大的便利。如何把面向对象编程形容成搭积木的话,函数式编程就像拼线条,更灵活和更有创意。
异步编程: 由于函数式编程提倡变量不可变,使异步编程变得非常容易。同时Scala提供的Future,和akka类库,使得异步编程变得非常容易。
基于JVM: Scala会被编译成为jvm bytecode,所以Scala能无缝集成已有的Java类库。你可以非常自然的使用已经存在的非常庞大且稳定的Java类库,比如小巧好用的apache.common.*,或者Java上的各种工具类库。
静态类型: Scala是具备类型系统,通过编译时的检查,保证代码的安全性和一致性。类型系统具体支持以下特性:泛型类,型变注释(Variance Annotation),类型继承结构的上限和下限,把类别和抽象类型作为对象成员,复合类型,引用自己时显式指定类型,视图,多态方法。
扩展性: Scala的设计承认一个事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:任何方法可用作前缀或后缀操作符,可以根据预期类型自动构造闭包。联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。
------------------------/基础语法/--------------------------------
常用数据类型:无基本类型与包装类型之分
Byte Short Int Long Float Double Char Boolean String
//变量和常量,可以省略";"
var x:Int=10 //区分大小写
var x = 11 //不给定变量的类型,系统也可以自动推导出来
val y:Int=100
lazy val y:Int=100 //只用于val,在第一次使用时才会初始化其值
//字符串连接:与java相似
println("aaa"+" "+"bbb")
//if else语句
val x=50
if(x<1)
print("x<1")
else if(x<100)
print("x<100")
else
print("x>=100")
//while语句
// 没有break和continue关键字
var x=0
while(x<3){
println(x)
x=x+1
}
// do while语句
var x=0
do{
println(x)
x=x+1
}while(x<3)
// break语句
package myscala
import scala.util.control._
object Hello{
def main(args:Array[String]): Unit ={
// 创建Breaks对象
val loop = new Breaks;//Scala中有定义的Breaks类,通过该类调用breakable/break函数
// 在breakable中循环
var x=0
loop.breakable{
while(x<100){
println(x)
x=x+1
if(x==3)
loop.break; //跳出循环
}
}
}
}
// for循环,在Scala 中只有加强for 循环
for(x<-1 to 10)
print(x+" ")
//循环表达式
1 to 10 //1-10 包含头尾
1.to(10) //1-10
1 until 10 //1-9包头不包尾
Range(1,10) //1-9
Range(1,10,2) //步长为2:1 3 5 7 9
Range(10,1,-2) //10 8 6 4 2
Range(10,1,0) //错误,步长不可以为0
// 守卫语句
for(x <- 1 to 10 if x%2==0)
print(x+" ")