首页 > 学院 > 开发设计 > 正文

scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归

2019-11-11 05:25:23
字体:
来源:转载
供稿:网友

http://www.cnblogs.com/yjmyzz/p/4694800.html

package yjmyzz import scala.io.StdIn object ScalaApp {   def main(args: Array[String]) {    PRintln("please input something,press Enter to exit:"//每一行最后加不加分号都可以    readKeyboard //注:无参数的函数调用,加不加括号都行    println(add(12) + "/n------/n")    println(div(12) + "/n------/n")    println(div(10) + "/n------/n")    println("5!=" + factorial(5) + "/n------/n")    println("-1!=" + factorial2(-1) + "/n------/n")    println("5!=" + factorial2(5) + "/n------/n")  }   /**   * 键盘读取示例(无返回值)   */  def readKeyboard() {    //注:无返回值,即相当于返回值为Unit,所以上面的方法声明也可以写成    // def readKeyboard(): Unit = {    var line = StdIn.readLine()    while (line != "") {      println("you just input the : " + line)      line = StdIn.readLine()    }    println("bye/n")  }   /**   * 整数加法(带返回值示例)   * @param x   * @param y   * @return   */  def add(x: Integer, y: Integer): Integer = {    print(x + " + " + y + " = ")    x + y //返回值,连return都不用加,十分简洁  }   /**   * 异常处理示例   */  def div(x: Long, y: Long): Double = {    var hasError = false    try {      if (y.equals(0L)) throw new RuntimeException("divide by zero"else x.toDouble / y    }    catch {      case e: Exception => {        hasError = true        println("error:" + e.getMessage())        Double.MinValue      }    }    finally {      if (hasError) println("finished , but there has a error"else println("finished")    }  }   /**   * 递归示例   * @param x   * @return   */  def factorial(x: Integer): Long = {    if (x.equals(0)) 1 else x * factorial(x - 1)  }   /**   * 演示for循环   * @param x   * @return   */  def factorial2(x: Integer): Long = {    if (x <= 0return 1 //注:加return后,下面的代码就不执行了    println("test")    var temp = 1L    for (i <- 1 to x) {      temp = temp * i    }    temp  } }

从语法风格上看,确实比java简洁无数,有那么一丁点javascript的味道。

函数定义,除了用正式的def来定义外,还可以"匿名"定义,比如下面这样:

12var add = (a: Integer, b: Integer) => a + b //是不是有点c#中匿名方法和lambda的味道了:)println(add(12))

 对于无参函数,可以做为另一个函数的参数

123456789101112131415def oneFunc = {  println("one func")} /** * 无参函数,可以直接作为另一个函数的参数(有点象c#中的委托) * @param a */def twoFunc(a: Unit) = {  a  println("two func")} //调用示例twoFunc(oneFunc)

for循环还可以写得更强大:

1234567891011121314def forDemo = {  for (x <- 1 to 2; y <- 3 to 4) println("x=" + x + ",y=" + y)   println   //上面的写法,等效于下面的写法  for (x <- 1 to 2)    for (y <- 3 to 4)      println("x=" + x + ",y=" + y)   println  //带条件的for循环(打印10以内的偶数)  for (i <- 1 to 10if % 2 == 0) println(i)}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表