Scala学习第二天:Scala函数定义、流程控制、异常处理入门实战

信息来源于 DT大数据梦工厂微信公众账号:DT_Spark


一 Scala 函数的定义

按照以下格式定义scala函数.

def 函数名称(函数输入参数类型){

        //函数的实现提

}

1) 第一个简单的例子 HelloWorld

object Test2 {

     def main(args: Array[String]):Unit = {

          println("HelloWorld")

   } 

           

}

a)可以看到输出语句的结尾没有以“;”结束,因为scala的设计者认为,多大一个字符对开发者来说是痛苦的。

他不太赞成在语句的结束写 “;” , 但你也可以写 “;” 结束

b)如果没有返回值内容,可以把 Unit去掉。如下所示。

object Test2 {

     def main(args: Array[String]) = {

          println("HelloWorld") ;

   }            

}

2)没有输入参数的函数

  def doWhile() {

    var line = ""

    do {

      line = readLine()

      println("Read: " + line)

    } while (line != "")

  }

  def main(args: Array[String]) = {

    doWhile

   

  }

   在scala中定义函数的变量使用的关键字是 var ,哈哈,又找到了javascript的感觉。感觉就像是js的一个翻版。运行这段函数,在控制台输入任意字符串,可以看到函数有响应了,如果不输入任何值,直接按回车,程序停止运行。

其中 readLine()函数如起名一样,是读取一行输入的内容, 并输出读入的内容,并复制给变量line,然后打印出这个变量 。  调用函数 doWhile放在主程序入口main中。运行代码效果如下所示:

 

  鼠标停留在 readLine()函数体上,按住 CTRL ,可以看到函数体的实现,可以发现是 Predef类里的一个函数。

 

 

    Scala中默认会导入几个包,其中一个就有 Predef ,这里的包和java中的包是类似的,都是防止命名冲突,也就是说可以起相同的类名,但要放在不同的包下。

 

 

3)具有参数的函数定义

  def looper(x: Long, y: Long): Long = {

    var a = x

    var b = y

    while (a != 0) {

      val temp = a

      a = b % a

      b = temp

    }

    b

  }

  def main(args: Array[String]) = {

    println(looper(100, 298))

  }

然后运行这段代码,得到以下值 :

2

 

4) 有逻辑运算的函数

  def main(args: Array[String]) = {

    var file = "scala.txt"

    if (!args.isEmpty) {

      file = args(0)

    }

    println(file);

  }

   这段代码的是定义一个变量 file等于 "scala.txt",如果程序有输入值,就复制给变量file,如果没有输入值,就是用默认的名称"scala.txt".

  在写一段打印输出1到10集合里的元素代码。在for循环体内通过箭头( <- ) 给变量复制。

 def main(args: Array[String]): Unit = {

    for (i <- 1 to 10) {

      println("Number is: " + i)

    }

  }

得到如下输出结果:

Number is: 1

Number is: 2

Number is: 3

Number is: 4

Number is: 5

Number is: 6

Number is: 7

Number is: 8

Number is: 9

Number is: 10

也可以写成 1.to(10), 因为1是一个对象,它有方法to,也可以输出同样的结果。

  def main(args: Array[String]): Unit = {

 

    for (i <- 1.to(10)) {

      println("Number is: " + i)

    }

   

  }

    可以看出scala非常灵活,,它是一个完全面向对象的语言。按照“一切解释对象”的思想,1也是个对象,所以它有方法 to.

 

 

   增强型的for 运算,打印当前目录下的文件。

def main(args: Array[String]): Unit = {

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

    for (file <- files) {

      println("当前路径下有文件 -> "+file)

    }

  }

运行代码得到如下结果:

当前路径下有文件 -> .\.cache-main

当前路径下有文件 -> .\.classpath

当前路径下有文件 -> .\.project

当前路径下有文件 -> .\.settings

当前路径下有文件 -> .\.worksheet

当前路径下有文件 -> .\bin

当前路径下有文件 -> .\src

当前路径下的文件有以下内容,可见结果符合实际情况。

 

       可以Scala逻辑型函数的定义还是比较简单的,要注意的一点就是,函数定以后,如果要调用就要放在Scala Object的main函数中,

因为main函数是Sclal Object的入口点,函数的运行都要从main开始。在从main函数调用定义的函数,这点看和C,C++和java都是相同的。

 

二异常处理

    在scala中的异常处理和java应,也要对可能发生异常的代码进行 try,catch捕获异常和finaly最终处理异常。但和java不同的是,它是通过case匹配异常。

   判断一个输入数是否是偶数,如果被2整除的余数不是0,就捕获异常。

 def main(args: Array[String]): Unit = {

    val n = 99

    try {

      val half = if (n % 2 == 0) n / 2

      else throw new RuntimeException("N must be event")

    } catch {

      case e: Exception => println("The exception is:" + e.getMessage)

    } finally {

    }

  }

运行代码,得到如下输出:因为99是奇数,当然会抛出抛出RuntimeException。

The exception is:N must be event

 

 

附上学习视频,供大家参考:

http://pan.baidu.com/s/1mgqwLZU

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值