首页 > 技术文章 > 18_定义函数

bajiaotai 2021-10-17 18:31 原文

函数定义
* 语法
* def 函数名称(参数列表): 返回类型 = {
* 方法体
* [return]
* }
* 注意事项 : 参数列表 必须标注类型,因为Scala编译器无法推断 参数列表的数据类型
*
* 函数至简原则(重点) - 能省则省
* 1. return 可以省略,Scala会将方法体的最后一行的值作为返回值
* 2. 如果函数体 只有一行代码, 可以省略花括号
* 3. 返回值类型如果能够推断出 可以省略(:返回值类型)
* 4. 如果方法体内 有return,则不能省略(:返回值类型),必须指定
* 5. 如果已指定 返回类型为Unit(类似java中的void),那么函数体内 无需 return
* 6. 如果无返回值类型,可以省略 = 号,这样的结构我们称之为 过程
* 7. 如果函数没有参数 声明参数列表,调用时可以省略 (),也可以不省略
* 8. 如果函数没有参数 没有声明参数列表,调用时必须省略 ()
*
* 函数的参数
* 1. 可变参数 格式 参数名称:dataType* ,dataType类型的数组
* 2. 如果参数列表中有多个参数, 可变参数一般放在最后
* 3. 参数默认值,一般将有默认值的参数放在参数列表的最后
* 4. 带参数名调用
* */
/**
  * @author gaocun
  * @create 2021-10-09 9:05 AM */
object 定义函数_01 {

  def main(args: Array[String]): Unit = {
    /*函数定义
    *   语法
    *     def 函数名称(参数列表): 返回类型 = {
    *       方法体
    *       [return]
    *      }
    *   注意事项 : 参数列表 必须标注类型,因为Scala编译器无法推断 参数列表的数据类型
    *
    *   函数至简原则(重点) - 能省则省
    *     1. return 可以省略,Scala会将方法体的最后一行的值作为返回值
    *     2. 如果函数体 只有一行代码, 可以省略花括号
    *     3. 返回值类型如果能够推断出 可以省略(:返回值类型)
    *     4. 如果方法体内 有return,则不能省略(:返回值类型),必须指定
    *     5. 如果已指定 返回类型为Unit(类似java中的void),那么函数体内 无需 return
    *     6. 如果无返回值类型,可以省略 = 号,这样的结构我们称之为 过程
    *     7. 如果函数没有参数 声明参数列表,调用时可以省略 (),也可以不省略
    *     8. 如果函数没有参数 没有声明参数列表,调用时必须省略 ()
    *
    *   函数的参数
    *     1. 可变参数 格式 参数名称:dataType* ,dataType类型的数组
    *     2. 如果参数列表中有多个参数, 可变参数一般放在最后
    *     3. 参数默认值,一般将有默认值的参数放在参数列表的最后
    *     4. 带参数名调用
    * */

    printf("max1 : %d\n", max1(10, 9))
    printf("max2 : %d\n", max2(10, 9))
    printf("max3 : %d\n", max3(10, 90))
    printf("max4 : %d\n", max4(10, 90))
    max5(10, 90)
    max6(10, 90)
    max7
    max7()
    max8
    // max8() max8 does not take parameters

    /* 函数的参数*/
    test("dawang", "he")
    test1(1, "西门", "东方")
    test2(1)
    test2(id = 1, "八戒")
  }

  /*定义函数*/
  //  1.return 可以省略,Scala会将方法体的最后一行的值作为返回值
  def max1(x: Int, y: Int): Int = {
    if (x > y) 100
    else y
    var id = 99999
    id
  }

  //  2.如果函数体 只有一行代码, 可以省略花括号
  def max2(x: Int, y: Int): Int = if (x > y) 100 else y

  //  3.返回值类型如果能够推断出 可以省略(:返回值类型)
  def max3(x: Int, y: Int) = if (x > y) 100 else y

  //  4.如果方法体内 有return,则不能省略(:返回值类型),必须指定
  def max4(x: Int, y: Int): Int = {
    if (x > y) x else y
    return 999
  }

  //  5.如果已指定 返回类型为Unit(类似java中的void),那么函数体内 无需 return
  def max5(x: Int, y: Int): Unit = {
    if (x > y) x else y
    return 999
    print("大王")
  }

  //  6. 如果无返回值类型,可以省略 = 号
  def max6(x: Int, y: Int) {
    if (x > y) x else y
    return 999
    print("大王")
  }

  //  7. 如果函数没有参数 声明参数列表,调用时可以省略 (),也可以不省略
  def max7() {
    print("max7\n")
  }

  //  8. 如果函数没有参数 没有声明参数列表,调用时必须省略 ()
  def max8 {
    print("max8\n")
  }

  //  1. 可变参数 格式 参数名称:dataType* ,dataType类型的数组
  def test(s: String*): Unit = {
    printf("第一个参数 : %s 第二个参数 : %s\n", s(0), s(1))
  }

  //  2. 如果参数列表中有多个参数, 可变参数一般放在最后
  //  *-parameter must come last
  def test1(id: Int, s: String*): Unit = {
    printf("id : %d 第一个参数 : %s 第二个参数 : %s\n", id, s(0), s(1))
  }

  //  参数默认值,一般将有默认值的参数放在参数列表的最后
  def test2(id: Int, name: String = "default-长空"): Unit = {
    printf("id : %d name : %s\n", id, name)
  }


}

 

推荐阅读