(一)几个基本概念:字面量、值、变量和类型
1、字面量:直接出现在源代码中的数据,如数字5、字母A、文本“hello world”
2.、值:是一个不可变的、有类型的存储单元。可以在定义值是为它指定数据,不过不允许重复赋值
如果定义一个值时未指定类型,编译器可以从赋值判断这个值的类型,这个过程称为类型推导,一般只有在不会削弱代码可读性的情况下才使用类型推导。
如果定义一个值时指定了类型,而这个类型与初始值不兼容,就会得到一个编译错误
定义一个名为x、类型为Int的值,并将它赋值为字面量5:val x:Int = 5或val x=5
3、变量:是一个可变的、有类型的存储单元。可以在定义变量时为它指定数据,而且可以在任何时间重新赋值,尽管变量可以重新赋值,但是不能改变为它指定的类型
定义一个名为x、类型为double的值,并将它赋值为字面量2.72:
var x:Double = 2.72
x = 355.0/113.0
4、类型:是所处理数据的种类,这是对数据的一个定义和分类。
(二)命名规则
Scala命名规则和Java大体相同,可以使用字母、数字、下划线和一些特殊的操作符字符,不过scala可以使用关键字命名,关键字需要包含在一对反引号中
(三)数据类型
scala包括数值类型和非数值类型,可以用来定义值和变量
数值数据类型包括:Byte、Short、Int、Long、Float和Double
非数值数据类型包括:Char、Boolean和String
数值类型:
Scala支持根据类型等级自动将数字从一种类型转换到另一种类型(从低等级到高等级)
举例:
val b:Byte = 10
val s:Short = b
val d:Double = s
但Scala不允许从较高等级类型自动转换到较低等级类型。
举例:
val l : Long = 20
val i : Int = l
会导致一个错误
可以选择toXXX方法手动完成类型间的转换,所有数值类型都有这样一个方法。尽管转换到一个较低等级类型有可能导致丢失数据,但是
如果你很清楚数据与较低等级类型兼容,这个类型转换就会很有用。
举例:
val l:Long = 20
val i:Int = l.toInt
非数值类型:
Char字面量使用单引号,举例:
val c = 'A'
val l:Int = c
val t:Char = 116
Boolean只有两个值:true和false
举例:
val isTrue = !true
val unequal = (5 != 6)
val definitelyFalse = false && unequal
String:scala的String建立在Java的String基础上,另外增加了多行字面量和字符串内插等特有的特性。
String字面量要使用双引号,特殊字符要用反斜线转义
举例:
val hello = "hello world"
val signature = "With Regards,\nYour friend"
String类型也支持使用数学运算符,可以使用相等运算符(==)比较两个String值,与Java不同,相等操作符(==)会检查真正的相等性,而不是对象引用相等性。举例:
val greeting = "Hello,"+"World"
val matched = (greeting == "Hello,World")
val theme = "Na" * 16 +"Batmanl" //*16表示输出16个NA
String可以用三重引号创建多行String,多行字符串是字面量,所以如果其中使用了反斜线,不要认为它是一个特殊字符的开头。
举例:
val greeting = """She suggested reformatting the file
| by replacing tabs\t with newlines\n;
|"Why do that?",he asked."""
字符串内插:
要在一个String中加入值或变量,更直接的一种方法——字符串内插。
Scala的字符串内插记法是在字符串的第一个双引号前面增加一个“s”前缀,然后可以使用美元符($)指示外部数据的引用。如果引用中有非字字符,或者如果引用与周围文本无法区分,就需要使用可选的大括号。
举例:
val approx = 355/113f
println(s"Pi,using 355/113,is about $approx")
val item = "apple"
s"How do you like them ${item}s?"
s"Fish n chips n vinegar,${"pepper "*3}salt"
val item = "apple"
f"I wrote a new $item%.3s today"
f"Enjoying this $item ${355/113.0}%.5f times today"
(四)元组
一个包含两个或多个值的有序容器,这些值可以有不同的类型。
在关系型数据库中,表中的一行可以认为是一个元组,作用只是作为多个值的容器。
创建元组时,值之间要用逗号分隔,并用一对小括号包围。
举例:val info = (5,"Korben",true)
可以根据元素的索引(从1开始)访问元组中的单个元素
举例:val name = info._2
创建一个大小为2的元组,另一种候选形式是利用关系操作符(->),这是一种表示元组中键-值对的流行的快捷方式,访问元素仍然使用下划线加索引
举例:
val red = "red" -> "oxff0000"
val reversed = red._2 -> red._1