Scala函数
1. 方法的定义和使用
-
不需要
return
-
没有参数的时候可以不用括号
def 方法名(参数名:参数类型): 返回值类型 = { // 括号内的叫做方法体 // 方法体内的最后一行为返回值, 不需要使用return }
-
一个例子
/** * Author: 3zZ. * Date: 2020/1/2 10:30 下午 */ object FunctionApp { def main(args: Array[String]): Unit = { println(add(2, 3)) println(three()) println(three) // 没有入参的函数 调用的时候 括号是可以省略的 sayHello("zhangsan") sayHello } def add(x: Int, y: Int): Int = { x + y // 最后一行就是返回值 } def three() = 1+2 def sayHello(): Unit ={ println("say hello") } def sayHello(name:String): Unit ={ println("say hello "+name) } } // 返回的结果如下 5 3 3 say hello zhangsan say hello
2. 默认参数、命名参数
-
在函数定义时,允许指定参数的默认值
-
在参数调用的时候,可以指定名字改变参数的顺序
-
一个例子
/** * Author: 3zZ. * Date: 2020/1/2 10:30 下午 */ object FunctionApp { def main(args: Array[String]): Unit = { sayName()// 这里括号不能省略 sayName("2yy") println(speed(100,10)) println(speed(time = 5,distance = 100)) // 命名参数 可以将参数的顺序调换 } def sayName(name:String="3zz"): Unit ={ println(name) } def speed(distance:Float, time:Float): Float ={ distance / time } } // 返回的结果 3zz 2yy 10.0 20.0
3. 可变参数
-
JDK5+
:可变参数 -
Spark-sql中源码
// Dataset.scala文件中的select方法 @scala.annotation.varargs def select(cols: Column*): DataFrame = withPlan { Project(cols.map(_.named), logicalPlan) } @scala.annotation.varargs def select(col: String, cols: String*): DataFrame = select((col +: cols).map(Column(_)) : _*)
-
一个小例子
/** * Author: 3zZ. * Date: 2020/1/2 10:30 下午 */ object FunctionApp { def main(args: Array[String]): Unit = { println(sum2(1,3,5)) } def sum2(numbers:Int*) = { var result = 0 for(number <- numbers){ result+=number } result } } // 返回的结果 9
4. 条件表达式
- 和
Java
用法基本相同
val x = 1
if(x > 0){
true
} else {
false
}
5. 循环表达式
-
to
关键字:范围包含两边1 to 10 res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) // 包含了 1 和 10 // 另外一种写法 1.to(10) res2: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
-
Range
关键字:左闭右开Range(1,10) res1: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9) // 没有10 Range(1,10,2) res3: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
-
until
关键字:左闭右开1 until 10 res4: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
-
for
循环 /foreach
方法// 第一种方法 使用for循环 val courses = Array("1a","2b","3c","4d") for(course <- sources) { println(course) } // 输出 1a,2b,3c,4d // 第二种方法 使用foreach courses.foreach(course => println(course)) // => : 相当于将course作用上右边的函数 变成另外一个结果 // 输出 1a,2b,3c,4d
-
while
循环var (num, sum) = (100,0) while(num > 0){ sum= sum + num num= num - 1 } println(sum) // 输出5050