[Scala02]Scala中的类型体系

1、变量(variable):

val 定义 immutable variable 

var 定义 mutable variable

lazy val 定义惰性求值的immutable variable

#变量可以不显示的指定类型,scala足够聪明,会自动进行类型推导

#lazy val的使用场景:该表达式不会马上用到,或者表达式的计算需要消耗大量的网络资源

scala>var x:Int =10

>x : Int=10

scala>var y =20

>y : Int =20

#以上两种定义变量的方式都可以

scala>x+y

>res0 : Int =30

#res0、res1、res2、、、是scala为没有变量名的表达式默认取的变量名

scala>lazy val z = y-x

z : Int = <lazy>

#没有立即求解出z的值

scala>f*10

>res1 : Int =100

#第一次使用到f的时候进行求值

2、scala类型体系:

[Scala02]Scala中的类型体系

1)scala的根类叫做Any,它有两个子类:AnyVal和AnyRef,AnyVal所有值类型的父类,AnyRef是所有引用类型的父类

2)AnyVal有四个子类:Numeric types、Boolean、Char、Unit。Numeric types为数值类型、Boolean为布尔型、Char字符类型、Unit空类型(相当于java和c语言里的void)。

3)AnyRef有两部分组成:所有java中的引用类型、所有scala自定义的类。

4)Null是所有引用类型的最后一个子类,Nothing是所有scala类型的最后一个子类

5)Unit常作为函数返回值类型出现,函数不返回任何值,这表明函数具有副作用

6)scala>val a :Unit=()

      >a :Unit=()

     scala>val b=()

     >b :Unit=()

[Scala02]Scala中的类型体系

3、Null和Nothing

Null表示引用类型的值为空,但在scala中我们这种场景下通常不使用Null,使用Option

Nothing表示程序异常终止。对于一个函数而言,如果返回值是Nothing,表明函数发生了异常。

scala>def foo=throw new Exception("error occurred")

>foo : ()Nothing

4、String

scala中的String和java中的String一样,但是scala新增了一个字符串插值的特性

scala>val a ="xiaoming"

>a : String =xiaoming

scala>val b=s"my name is ${a}"

>b : String =my name is xiaoming

5、代码块的两种表现形式

{表达式1;表达式2;.......}

#若花括号内只有一个表达式则花括号可以省略

{

表达式1

表达式2

..........

}

#代码块的作用是组织多个表达式,但代码块本身也是一个表达式,它的值等于最后一个表达式的值


6、函数

def functionName(参数1:参数类型,参数2:参数类型,........):函数返回值类型={

代码块

}

#函数可以不写返回值类型,scala会自动推导出返回值类型

def functionName(参数1:参数类型,参数2:参数类型,........)={

代码块

}

7、简单的代码

Object func_examples{

 def hello(name:String):String={

 s"hello,${name}"

}

 hello("xiaoming")

 def hello(name:String)={

   s"hello,${name}"

 }

 hello("xiaoming")

 def add(x:Int,y:Int)=x+y

add(1,2)

}

##################################################

以上运行结果:

res0:String=hello,xiaoming

res1:String=hello,xiaoming

res2:Int=3

8、if表达式

if(逻辑表达式)valueA else valueB

#逻辑表达式结果为真,返回valueA,为假返回valueB

举例:

scala>if(true) 1 else 2

>res0 : Int = 1

scala>val a=1

>a : Int = 1

scala>if(a==1) a

>res2 : AnyVal = 1

scala>if(a!=1) "not one"

>res3 : Any=()

scala>if(a!=1) "not one" else a

>res0 : Any = 1

9、for表达式

Object work_sheeet{
 val a=List("alice","bob","cathy")

 for(s<-a

  //这行代码会将a中的值逐一赋给s

)println(s)

for(s<-a

if(s.length>3)

)println(s)

val result_for=for(s<-a

s1=s.toUpperCase()

  )yield(s1)

//yield(s1)会将逐一得到的s1的值放到一个集合中去

}

运行结果:

>alice

|bob

|cathy

>alice

|cathy

>result_for:List[String]=List(ALICE,BOB,CATHY)

10、try表达式

try{  Integer.parseInt("dog")

//将“dog”转成Int型

}catch{

 case _=>0

 //_为通配符,表示任何对象。上面代码表示无论遇到怎样的异常都返回0

}finally{   print("alway be printed")

}

//finally语句中的内容总是会被执行,无论try块中是否抛出异常

11、match表达式

Object work_sheeet{

 val code=1

val result_match=code match{

case 1=> "one"

case 2=> "two"

  case _ => "others"

//_为通配符,表示任何对象。

}

运行结果:

result_match:String=one