[Scala] Scala 学习笔记 (2) - 函数

Scala函数

1. 定义函数

格式:定义   函数名(参数列表):返回值 = {函数体}

def func(x:Int, y:Int, ...) : 返回值 = {
        ...
        xxxx    // 最后一行默认为返回值
    }

标准函数:有入参、出参、有返回值

    def add(x:Int, y:Int):Int = {
      x + y
    }

当返回值类型确定,返回值类型可以自动推导出来时,返回值类型可以省略

    def add1(x:Int,y:Int) = {
      x + y
    }

注意:如果是递归方法,必须要写返回值类型,因为递归方法必须要有一个出口。

没有入参、没有出参,也没有返回值(返回值类型是Unit)的函数

def sayHello(): Unit = {
      println("say hello")
    }
    sayHello()
    sayHello    // 当调用的函数没有入参时,可以省略()。(带有默认参数的函数除外)

2. 调用函数

格式:函数名(参数列表)

注意:当调用的函数没有入参时,可以省略()。(带有默认参数的函数除外)参照上面的例子。

3. 函数的特殊参数类型

默认参数:入参有默认值的函数,不传则使用默认参数,传参则使用传进去的值

    def loadSparkConf(fileName:String = "spark-default.conf"): Unit = {
      println(fileName)
    }
    loadSparkConf()
    loadSparkConf("Spark.conf")

可变参数:参数个数不确定时,方便扩展(特殊示例:把Range类型转换成可变参数

    def sum(nums:Int*) = {
      var res = 0
      for (num <- nums) {
        res += num
      }
      res
    }
    println(sum(2,4,6))
    // 1.to(10)是一个range类型,我们计算要传参类型为Int。下面的方法可以将Range转换成可变参数,:_*是固定写法
    println(sum(1.to(10) :_*))
    // 另外一个示例
    def printFruits(fruits:String*): Unit = {
      for (fruit <- fruits) {
        println(fruit)
      }
    }
    printFruits("apple","orange","banana")
    printFruits(Array("apple","orange","banana"):_*)  // 把Array转成可变参数传进去

命名参数:(比较少用,了解即可)

def teacher(spark:String, scala:String): Unit = {
      println(spark)
      println(scala)
    }
    teacher("Ruoze", "Jepson")  // 不想写参数名时按照顺序写即可
    teacher(scala="Ruoze",spark="Jepson") // 可以根据名称传进去(这种用法比较少)

 

猜你喜欢

转载自blog.csdn.net/wawa8899/article/details/81190185