scala基础综合

也看过了几种语言了,平时使用的以Java居多,不过总结了一下,编写代码的时候无非要知道你定义的变量的类型是什么、在函数或者方法中使用这些变量、函数或者方法中又会包括很多控制结构、再涉及一些编码的技巧、隶属于该语言的一些奇巧淫技、以及这门语言的一些高级特性,所以自己不是科班出身,但是对于语言的学习确实也需要做定期地总结,并且学会比较各种语言之间得区别。

在scala基本类型中包括整数类型和数类型,其中整数类型有:Byte、Short、Int、Long、Char;数类型包括:Float、Double,并且这些类型都相应的有自己的取值范围。

**1、字面量**

打开可爱的scala编译器,来做一些关于字面量的小实验。

**整数字面量**

十六进制

val hex = 0x1 --->hex :Int = 22

八进制

val oct = 011 --->oct :Int  = 9

如果整数字面量结束于L或者l,那么其就是Long类型。

val lvalue = 11L --->lvalue :Long = 11

通过上面例子的输出结果我们看到不同于java这些语言,我们并没有给变量定义类型,但是编译器自动为我们推导出了类型,假如我们想定义一个Short类型的,那么可以这么做:

val sValue : Short = 10 --->sValue :Short = 10

**浮点数字面量**

浮点数字面量是由十进制、可选的小数点、可选的E或者e以及相应的指数部分组成,看几个例子:

val fv = 2.212 --->fv :Double = 2.212
val feV = 2.11121e2 --->feV :Double = 211.121

以上我们看到类型会自动转为Double类型,那么我们怎么定义一个Float类型呢?看下面的例子:

val fV = 2.1212F  --->fV :Float  = 2.1212
val sFV = 10e5F --->sFV :Float = 1000000.0

假如在定义浮点数数的时候后面加了f或者F则为Float类型,否则为Double类型。

**字符字面量**

val cV = 'B' --->cV :Char = B
val cUV = '\45'--->cUV :Char = x

我们还可以这样写

val A\u0045\u0046 = 10f --->AEF :Float = 10.0

即unicode编码可以出现在任何位置。

**字符串字面量**

val s = "Hello WOrld" --->s :String  = Hello World

只要以双引号(““)括起来就行了。

在scala中还有一种特殊的符号,三引号(“””),看一下具体使用方式。

println("""Hello World,My name is scala, 
nice to meet you.""")

我们可以看到输出的字符串并没有对齐,那么你可以这样写:

println("""|Hello World,My name is scala,
|nice to meet you.""")
就是在每个句子的前面加一个( )管道符,这个我们在linux指令中是经常看到的。

**布尔型字面量**

val bool = true --->bool :Boolean  = true

**符号字面量**

val symble = 'mjgao --->symble :Symbol = 'mjgao
symble.name --->res2 :String = mjgao

**2、操作符和方法**

这里我就举几个简单的例子来展示一下,毕竟想穷举下来确实需要费很多力气与时间。

val k = 1+1 --->k :Int = 2
val kk = (1).+(1) --->kk :Int = 2
val str = "Hello World" --->str :String = Hello World
val strL = "Hello World" length --->strL :Int = 11

其实在scala中操作符就是方法,而像上面字符串的那种写法也是方法的一种调用方式,只是写的时候省略了(.)号,但是编译器会自动地进行编译。

**函数**

关于函数与方法的区别,这几天一直在看相关的文章,以后也要做一下小总结,这里只是列举几个例子来展示scala中的函数。

下面看几个函数的例子

def insert(name:String,psw:String) = println("name:"+name+",psw:"+psw)

输出为:insert(name:String,psw:String)Unit

insert(“mjgao”,”123”)

输出为:name:mjgao,psw:123

我们可以看到上面函数的返回类型是Unit,其实就相当于void,我上面的函数(方法)之所以那样写是因为方法体内比较简单。

 def update(name:String,psw:String):String = {
   "name:"+name+",psw:"+psw
 } 输出为:res4: String = name:mjgao,psw:123

可以看到我们并没有定义返回值,其实scala方法中是以最后一个表达式为准,所以会正常输出。

再看一个小例子

 def updateU(select:String=>String,name:String) = {
       select(name)
 }
 def select(name:String) = println("My name is:"+name)
 updateU("mjgao")

输出结果为:My name is:mjgao

是不是觉得很奇怪,看到了(“=>”)以及将函数嵌入到函数中去了,其实这就是后面讲的闭包,类似的例子例如:

List(1,2,3).map(_*2)
输出结果为:res11: List[Int] = (2,4,6)
val aList = (1,2,3)
aList.foreach(println)
输出结果为:1 2 3

其实以上aList.foreach(println)还可以写成aList.foreach(n=>println(n))aList.foreach(println _)等几种形式,至于基本的原理后面再进行讲解。

下面看几个关于控制结构的例子

for(i <- 1 to 4)
   println(i)
输出结果为:1 2 3 4
for(i <- 1 until 4)
   println(i)
输出结果为:1 2 3

看一个关于过滤的例子

for(l <- List(1,2,3,4,5,6) if l>3)
   println(l)
输出结果为:4 5 6

还可以使用yield来记住每个关键字

for {
   l <- List(1,2,3,5)
   if i>1
}yield i
输出结果为:res: List[Int] = list(2,3,5)

是不是感觉scala确实是灵活多变的一门语言。

大体上就写这么多了,再写的话还会涉及到很多引申的话题,这些都是一些基本的知识,说实话在写的过程中也确实挺累的,毕竟都是一些老生常谈的话题,但是只有把握好这些基础的,才可以进入下一个阶段。

———–EOF—————



Previous     Next
mjgao /