函数的基本使用

88 阅读3分钟

一、什么是函数

image.png

要点:

1. 特别注意要写=

2. 返回值类型要指定

基本函数:

object base31 {
  // 定义一个函数
  // 功能:求两个数的较大者
  // 格式:
  //     1.有一个等号  =
  //     2.返回值类型,函数内的最后一个表达式或者语句的值,就是函数的表达式。  (如:下面if语句就是返回值)
  def max(x: Int, y: Int): Int = {
    if (x > y)
      x
    else
      y
  }

  def main(args: Array[String]): Unit = {
    val rst = max(1, 100)
    println(s"$rst")

  }

}

不需要参数,可以省略()

object base31 {
  // 定义一个函数
  // 功能:求两个数的较大者
  // 格式:
  //    1. 有一个 =
  //    2. 返回值类型。
  //      函数内的最后一个表达式或者语句的值,就是函数的返回值。
  //      Unit 表示没有返回值,调用这个函数时,不会接收到任何的处理结果。
  def max(x: Int, y: Int): Int = {
    val t = if (x > y) x else y

    t // 就是返回值
  }

  // 如果一个函数不需要参数,可以省略()
  //
  def say: Unit = {
    printf("hahahaha~~~")
  }

  def main(args: Array[String]): Unit = {
    val rst = max(1, 100)

    println(s"$rst")

    // 调用一个没有()的函数,也不要加()
    say
  }
}

练习

1.求三个数的最大值

(1)三选一

object base32 {
    // 定义一个函数
    // 功能:求三个数的较大者
    // 分析:
    /*
    * 1. 三选一
    if(x>=y && x >=z){
      x
    } else if(y>=x&&y>=z){
      y
    } else{
      z
    }
 def main(args: Array[String]): Unit = {
      val rst = max(1000, 200, 100)
      println(s"$rst")
    }
}

(2)二选一后二选一

object base32 {
  // 定义一个函数
  // 功能:求三个数的较大者
  // 定义求两个数最大值的函数
* 2. 两次 二选一
    * var t = if(x>y) x else y
    * if(t>z) t else z
    */
    //
    def max(x: Int, y: Int, z: Int): Int = {
      var t = if (x > y) x else y
      if (t > z) t else z
    }

    def main(args: Array[String]): Unit = {
      val rst = max(1000, 200, 100)
      println(s"$rst")
    }
}

二、函数的调用

格式:返回值=函数(参数列表)

示例:两数求和

def getSum(x:Int, y:Int): Int = {
  x + y
}
val s = getSum(10,20)
printf(s)

三、函数规则

1.只有一行可以省略{}。当Scala的函数体中只有一行表达式时可以省略{},输出结果依然不变。

2.最后一条语句为函数的返回值。当函数体中有多个语句存在时,返回最后一条语句的值。

3.函数的返回类型可以省略。它会自动推断。

4.函数没有形参,在定义函数时可以省略(),那么在调用函数时也不需要添加()

四、返回多个值

让函数返回最大值和最小值数据

object base33 {
    // 定义一个函数
    // 功能:求三个数的最大值和最小值
    //注意:函数需要返回多个值
    def max(x: Int, y: Int, z: Int): ( Int,Int) = {
      var maxValue = if (x > y) x else y
      maxValue = if (maxValue > z) maxValue else z

      var minValue = if (x > y) y else x
      minValue = if (minValue > z) z else minValue

      //println(minValue, maxValue)

      (maxValue,minValue) // 是个整体
    }

    def main(args: Array[String]): Unit = {
      val rst = max(1000, 2000, 100)
      // ._x  访问这个整体的某个值
      println(s"最大值是:${rst._1},最小值是:${rst._2}")
    }
}

五、元组

表示不同类型值的集合,即元组可以用于存放不同类型的元素,例如可以存放整型、字符串、浮点型、自定义类型等等。Scala的元组类型可以使方法同时返回多个值,省略了中间部分的解析和集合的遍历。

定义元组:

第一种表示方式为:(元素1,元素2,…元素N)

第二种表示方式为:new TupleN(元素1,元素2,…元素N)。N最大为22

访问元组:

元组通过Tuple_INDEX的方式访问元组中的元素,Tuple表示元组,INDEX表示索引。

object base34 {
  def main(args: Array[String]): Unit = {
    // 元组:容器,可以装入不同类型的数据类型的数据
    //1.定义一个元祖,使用() 把数据包起来
    val t=(1,"1",1.2,false)
    //2.取出元素,通过._数字序号  来访问
    //取出1.2
    println(t._3)
    //取出false
    println(t._4)
  }

}

1.定义一个元组,使() 把数据包起来用

2.取出元素,通过._数字序号 来访问