zoukankan      html  css  js  c++  java
  • scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归

    package yjmyzz
    
    import scala.io.StdIn
    
    object ScalaApp {
    
      def main(args: Array[String]) {
        println("please input something,press Enter to exit:") //每一行最后加不加分号都可以
        readKeyboard //注:无参数的函数调用,加不加括号都行
        println(add(1, 2) + "
    ------
    ")
        println(div(1, 2) + "
    ------
    ")
        println(div(1, 0) + "
    ------
    ")
        println("5!=" + factorial(5) + "
    ------
    ")
        println("-1!=" + factorial2(-1) + "
    ------
    ")
        println("5!=" + factorial2(5) + "
    ------
    ")
      }
    
      /**
       * 键盘读取示例(无返回值)
       */
      def readKeyboard() {
        //注:无返回值,即相当于返回值为Unit,所以上面的方法声明也可以写成
        // def readKeyboard(): Unit = {
        var line = StdIn.readLine()
        while (line != "") {
          println("you just input the : " + line)
          line = StdIn.readLine()
        }
        println("bye
    ")
      }
    
      /**
       * 整数加法(带返回值示例)
       * @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 <= 0) return 1 //注:加return后,下面的代码就不执行了
        println("test")
        var temp = 1L
        for (i <- 1 to x) {
          temp = temp * i
        }
        temp
      }
    
    }
    

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

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

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

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

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

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

      def 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 10; if i % 2 == 0) println(i)
      }
    
  • 相关阅读:
    PDF文件中的Form保存问题
    Understanding IP Fragmentation
    tcp ip guide IPsec IKE
    Windows安全事件日志中的事件编号与描述
    Cisco PIX fix up and Juniper firewall FTP ALG
    很好的IPSec介绍,详细解释了IKE协商的2个阶段的作用
    virtualbox 下运行Ubuntu 8.10的分辨率和guest additions的问题。
    Fixing the ‘Do you want to display nonsecure items’ message
    windows xp 开始菜单里面所有项目右键不起作用。
    HP backup and recovery manager
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/4694800.html
Copyright © 2011-2022 走看看