Scala学习笔记之Scala基础

Scala基础


Scala中的每一个表达式都有一个值

变量声明


1.val不变量,var变量,建议使用val,申明不用加类型

2.加类型申明:val xmax,ymax:String = null

val细节

val声明的变量仅仅不允许引用重新分配,而不阻止对象内部的变化

Unit

scala中的()叫做Unit类,相当于其他语言中的void,表示无值.

异常

scala异常与Java类似,但是scala没有受检异常 ,既不需要在方法声明时声明会抛出的异常。

     1.可以在if/else处抛出异常

     2.异常处理过程。

       try{

       process(in)

       }catch{

       case _:MalformedUrlException=>print();

       case ex:IOException=>ex.printtlnStack()

       }

       这儿的_代表丢弃异常。

     3.可以使用try{}catch{}finally{}

子主题

枚举

定义:

object TrafficLightColor extends Enumeration{val Red,Yellow,Green=Value}

object TrafficLightColor extends Enumeration{val Red = Value(0,"Stop"),Yellow=Value(1,"end"),Green=Value}

     其中value是一个内部类,第一个属性是ID,第二个是name

  引入:import TranfficLight._

  引用:for(c<-TranfficLight.values);

          TranfficLight(0);

          TranfficLight.withName("red")

脚本和Main的区别

scala中的main和脚本与Python大致相同,但是Scala的main是一个object,而Python则是统一的

main方法

as:object hell{def main(args:Array[String]){}}

as:object hello extends App{if()..}//注意没有main方法,注意这种方法仅仅使用于简单以及单线程中

控制结构


scala的控制结构都可以返回一个值,因此常常像函数那样在最后一个块语句中写上放回值

当然也可以把结果赋给一个量

val filename =if (!args.isEmpty) args(0) else "default.txt"

另外也可以像常规的控制结构那样

var filename = "default.txt"

if (!args.isEmpty)

filename = args(0)

if

由于每一个表达式都有值,因此可以写出简写的三目表达式

if (x > y) x else y

for和foreach


for


1.unit和to的区别 i<-1 to 10//1...10,1 until 10//1...9

2.如果一个对象可以迭代那么可以简写 i <- object

3.在for中可以添加一个过滤器

val filesHere = (new java.io.File(".")).listFiles

for (file <filesHere if file.getName.endsWith(".scala"))

    println(file)

for (

file <filesHere

if file.isFile

if file.getName.endsWith(".scala")

) println(file)//注意这人的for可用圆括号,也可用大括号

4.for中的变量没有声明,其默认val

5.to仅仅可以表示增加,如果要减少使用reverse

6.yield返回的是整个for语句块的值,因此必须把yield放在整个for语句块的值,因此如下是错的

val list = for(

        file <- filesHere

        if file.isFile

        if !file.getName.endsWith(".scala")

    ){print(file); yield file}

而要把yield放在整个语句的开始

val list = for(

        file <- filesHere

        if file.isFile

        if !file.getName.endsWith(".scala")

    )yield{print(file); file}

对于一般的编程任务,可以简单的如下

def scalaFiles =for {

file <filesHere

if file.getName.endsWith(".scala")

} yield file

for高级

1.

for (p <- persons;n = p.name; if (n startsWith "To"))

    yield n

for {

    p <- persons

    n = p.name 

    if (n startsWith "To")

} yield 

可以看到for中至少需要一个迭代,其他的语句都可以有多个

2.有多个迭代式时,各个元素组合

for (x <- List(1, 2); y <- List("one", "two"))

    yield (x, y) 

结果

res3: List[(Int, java.lang.String)] =List((1,one), (1,two), (2,one), (2,two))

foreach

一般在可以迭代的类中,有一个foreach循环,foreach接受一个需要一个参数的函数,foreach在序列的每一个值上迭代使用函数

as “Hello”.foreach((c:Char)=>print(c))//一个lamda表达式

或者简单的写为,“Hello”.foreach(print)

异常

val half =if (n % 2 == 0) n / 2 else throw new RuntimeException("n must be even")

try {

    val f = new FileReader("input.txt")

// Use and close file

} catch {

    case ex: FileNotFoundException => // Handle missing file

    case ex: IOException => // Handle other I/O error

}

Switch

val firstArg = if (args.length > 0) args(0) else ""

firstArg match {

case "salt" => println("pepper")

case "chips" => println("salsa")

case "eggs" => println("bacon")

case _ => println("huh?")

}

1.scala可以把任意类型的值用在switch中,而Java不可以。

2.case 可以加守卫

3.scala中默认break

4.switch可以返回值

val firstArg = if (!args.isEmpty) args(0) else ""

val friend = firstArg match {

    case "salt" => "pepper"

    case "chips" => "salsa"

    case "eggs" => "bacon"

    case _ => "huh?"

}

println(friend) 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值