函数/方法的定义
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)