scala函数

函数/方法的定义

def function_name(x:Int, y:Int):Int = {
  // 括号内的叫做方法体

  //Java: return "";
  //Scala: 方法体的最后一行作为返回值,不需要return
}

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

在Scala中执行:
scala> def add(x:Int, y:Int):Int = {
| x + y
| }
add: (x: Int, y: Int)Int

scala> add(4,4)
res0: Int = 8

可以简写成:只有一行的话大括号可以不用写。
scala> def four() = 1 + 3
four: ()Int

scala> four
res1: Int = 4

没有返回值的写法:

def sayHello() {

  println("hello: xiaochun")
}


scala> def sayHello() {
| println("hello: xiaochun")
| }
sayHello: ()Unit

scala> sayHello
hello: xiaochun

标准的写法:
def sayHello():Unit = {
  println("hello: xiaochun")
}

scala> def sayHello():Unit = {
| println("hello: xiaochun")
| }
sayHello: ()Unit

scala> sayHello
hello: xiaochun


默认参数:在函数定义时,允许指定参数的默认值

def sayName(names:String = "PK"): Unit = {
  println(name)
}

// $SPARK_HOME/conf/spark-defaults.conf 配置文件的地址  

def loadConf(conf:String = "spark-defaults.conf"): Uint = {
  println(conf)
}

调用loadConf 函数:
loadConf()
loadConf("spark-production.conf")


调用函数sayName:
sayName() //没有赋值,就使用默认值,上面sayName函数的默认值就是PK
sayName("xiaochun") //给了什么参数就输出什么

输出的结果是:
PK
xiaochun

在IDEA里 ctrl + t 查看一个参数的详细信息


命名参数 :就是在调用函数的时候可以不按照顺序传递,按照参数名字也可以。 不建议这么用。

可变参数:
JDK5+版本以上 : 可变参数

def sum(a:Int, b:Int):Int = {
  a + b
}

def sum(a:Int, b:Int, c:Int):Int = {
  a + b + c
}

def sum2(number:Int*) = {    //*表示可以传多个同类型的参数,
  var result = 0
  for(number <- numbers) {
    result += number
  }
  result
}

调用sum2函数:

println(sum2(1,2))
println(sum2(1,2,3))
println(sum2(1,2,3,4))




条件表达式

val x = 1
if (x > 0) true else false


循环表达式:
to
Range
until


to的练习: 左臂右臂的区间,也就是既包含左边的又包含右边的。
scala> 1 to 10 也等价于 1.to(10)
res8: scala.collection.immutable.Range.Inclusive = Range(1,2,3,4,5,6,7,8,9,10)


Range的练习:是左臂右开的区间,也就是只包含左边不包含右边。
scala> Range(1,10)
res9: scala.collection.immutable.Range = Range(1,2,3,4,5,6,7,8,9)
scala> Range(1,10,2) //更改步长,步长不能是0。
res10: scala.collection.immutable.Range = Range(1,3,5,7,9)


scala> Range(10,1,-1)
res11: scala.collection.immutable.Range = Range(10,9,8,7,6,5,4,3,2)


until的练习:
scala> 1 until 10 也可以写成 1.until(10)
res12: scala.collection.immutable.Range = Range(1,2,3,4,5,6,7,8,9)


for 循环的写法:
for(i <- 1 to 10){
  println(i)
}

for(i <- 1 to 10 if i%2 == 0){
  println(i)
}

数组for循环的写法:
varl courses = Array("hadoop","Hive","HBase","Spark")

遍历数组的第一种写法:
for (course <- courses) {
  println(course)
}
遍历数组的第二种第二种写法:
//course 其实就是courses 里面的每个元素
//==> 就是将左边的course作用上一个函数,变成另外一个结果
//println 就是作用到course上的一个函数
courses.foreach(course => println(course))

while的写法:
var(num,sum)=(100,0)
while(num > 0){ //出口
  sum = sum + num
  num = num - 1 //步长
}
println(sum)

原文地址:https://www.cnblogs.com/green-frog-2019/p/11354230.html