Scala编程基础2:函数、递归、异常

一、函数的定义与调用

/**
 * 函数:在object内部编写
 * 方法(成员方法):在class内部编写
 */

object FunDemo1 {
  def main(args: Array[String]): Unit = {
    /**
     * def:定义函数或者方法的关键字
     * main:函数名 main函数是被jvm(java虚拟机)所特有识别的程序入口
     * args:参数名
     * Array[String]:参数的数据类型
     * Unit:返回值类型 相当于java中的void
     *
     * scala:def main(args: Array[String]): Unit = {}
     * 等价于
     * java:public static void main(String[] args)
     */
    
    /**
     * 函数的调用:
     * 1、在object对象内部,函数相当于加了一个static,可以直接使用object对象名调用
     * 2、在同一作用域下(同一个大括号下),调用时可以不加对象名
     * 3、函数可以在object对象中任意一个地方调用
     *
     */

    //函数的调用也可以简写
    //1、如果调用的函数只有一个参数的时候,可以按照下列方式简写
    val strings: String = "java.scala.spark,flink"
    val arr1: Array[String] = strings split '.'
    println(arr1(1))

    //调用所有add函数
    println(add0(11, 22.2)) //println(FunDemo1.add0(11, 22.4))
    println(add1(11, 22.2))
    println(add2("11", "22"))
    println(add3(11))
    //如果函数没有参数,调用时可以省略函数名后面的括号
    add4
    println(add5(11,"R"))


    //scala可以在方法内定义函数,java不可以
    def add5(a: Int, b: String): String = a.toString + b


  }

  /**
   * 定义函数时的简写方案:
   * 1、如果函数体中最后一行语句作为返回值的时候,return可以省略不写
   * 2、如果函数体中只有一行语句实现,{}可以省略不写
   * 3、函数的返回值可以进行自动类型推断,可以省略不写,但是对于递归函数,必须指定返回类型
   * 4、如果函数没有参数列表的话,()可以省略不写
   *
   */

  //原始写法
  def add0(a: Int, b: Double): Double = {
    return a + b
  }

  //1、如果函数体中最后一行语句作为返回值的时候,return可以省略不写
  def add1(a: Int, b: Double): Double = {
    a + b
  }

  //2、如果函数体中只有一行语句实现,{}可以省略不写
  def add2(a: String, b: String): Int = a.toInt + b.toInt

  //3、函数的返回值可以进行自动类型推断,可以省略不写
  def add3(a: Int) = a.toString + "#"

  //4、如果函数没有参数列表的话,()可以省略不写
  def add4 = println("好好学习,天天向上")

}

二、递归

函数的递归:函数内部调用函数本身的现象,叫做递归

object FunDemo2 {
  def main(args: Array[String]): Unit = {
    //求5的阶乘
    println(jiecheng(5))
    
    def jiecheng(number: Int): Int = {
      var numSum: Int = 1
      if (number == 1) {
        numSum
      } else {
        numSum * jiecheng(number - 1)
      }
    }
  }
}

三、异常

scala是对java语言的封装,scala中异常事实上就是java中的异常类

1、Error

2、Exception

      --编译时期异常

      --运行时期异常  RuntimeRxception

import java.io.{BufferedReader, FileNotFoundException, FileReader}

object FunDemo3 {
  def main(args: Array[String]): Unit = {
    /**
     * scala默认处理异常的方式是向外抛,如果程序报错,后续代码不会运行
     *
     * scala处理异常的另一种方式和java一样,try...catch..final,但是语法有些许区别
     */

    try {
      val br = new BufferedReader(new FileReader("xxx/xxx/xx/xx"))
//      val arr1: Array[Int] = Array[Int](11, 22, 33, 44)
//      println(arr1(4))
    } catch {
      //模式匹配,捕获并处理对应的异常,如果不知道异常种类,可直接使用Exception处理
//      case e: FileNotFoundException => println("文件路径找不到异常")
//      case e: ArrayIndexOutOfBoundsException => println("数组索引越界异常")
      case e:Exception=>println("有异常")
    }finally {
      //无论有没有对应的case捕获,都会执行
      println("finally")
    }

  }
}

注意:

1、scala默认处理异常的方式是向外抛,如果程序报错,后续代码不会运行

2、scala处理异常的另一种方式和java一样,try...catch..final,但是语法有些许区别

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Scala函数编程》是一本非常实用的Scala编程书籍,旨在教读者如何使用Scala编程语言实现函数编程。该书通过具体的实例和案例来阐述Scala函数编程的核心概念和技术,包括函数编程基础函数的高阶抽象、类型系统、模式匹配、并发编程、I/O 和异常处理等方面内容。这些知识点包含了Scala编程语言的重要概念,可以帮助读者深入掌握Scala函数编程的技术,并在实际应用中运用它们。此外,该书也涵盖了Scala代码风格和整洁性等方面,对编成良好的代码有很大的帮助。总之,这本书对于学习Scala函数编程的人来说是非常有实践价值的一本书籍。 ### 回答2: Scala函数编程的PDF是一本非常有价值的学习资料。对于想要深入学习Scala函数编程开发者,这本书提供了全面详尽的指导和实践经验,帮助开发者理解函数编程的核心概念和思想,并将其应用于Scala程序开发中。 该书主要包括以下内容: 1.函数编程的基本概念和原则,如不可变性、高阶函数、currying、尾递归等等。 2.函数式数据结构和算法的实现,包括列表、栈、队列、树、图等等。 3.如何使用Scala语言支持函数编程的特性,如case class、模式匹配、参数化类型、协变和逆变等等。 4.如何使用Scala函数编程框架,如Akka、Spark等来构建高效的分布式应用。 这本书主要适合已经有一定Scala编程基础或者其他函数编程语言经验的开发者阅读,由于书中的内容较为深入和专业,对于初学者不太友好。但对于有一定基础Scala开发者来说,该书是一本非常有价值的参考资料,可以帮助他们更深入地理解Scala函数编程,提高代码质量和开发效率。 ### 回答3: Scala是一种支持函数编程范式的编程语言,从而满足了编程语言发展中对于高度抽象和复杂数据处理的需求。Scala函数编程pdf是一个学习Scala函数编程理论和实践的重要资源。 Scala函数编程pdf包含Scala函数编程核心概念和技术,例如高阶函数、不可变性、模式匹配和递归等。它还涵盖了Scala函数编程中的一些常见问题和解决方案,以及Scala函数编程如何与面向对象编程 (OOP)相融合等。 Scala函数编程pdf还提供了丰富的实际案例,包括使用Scala函数编程技术实现算法、数据处理、Web应用程序、分布式编程等等。 总之,Scala函数编程pdf是Scala程序员学习和实践函数编程的重要资源,它提供了理论、实践和案例相结合的综合性学习体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值