函数
方法定义
def 方法名(参数: 参数类型): 返回值类型 = {
//方法体
//最后一行作为返回值(不需要使用return)
}
def max(x: Int, y: Int): Int = {
if(x > y)
x
else
y
}
package org.example
object App {
def main(args: Array[String]): Unit = {
println(add(2,5))
}
def add(x:Int,y:Int):Int={
x+y
}
}
7
package org.example
object App {
def main(args: Array[String]): Unit = {
println(three())
//没有入参的时候可以不用写
println(three)
}
def three()=1+2
}
无返回值 自动加Unit
默认参数
默认参数: 在函数定义时,允许指定参数的默认值
//参数
def sayName(name: String ) = {
println(name)
}
//默认参数
def sayName1(name: String ="sunzhongming.com") = {
println(name)
}
//main调用
sayName("hiszm.cn")
sayName1()
sayName1("haha")
hiszm.cn sunzhongming.com haha
命名参数
可以修改参数的传入顺序 ; 可以通过参数的名字来进行传参
def speed(destination: Float, time: Float): Float {
destination / time
}
println(speed(100, 10))
println(speed(time = 10, destination = 100))
可变参数
可变参数(可传入任意多个相同类型的参数)
def sum(number: Int*) = {
var result = 0
for(num <- number) {
result += num
}
result
}
阅读相关源码:org.apache.spark.sql.Dataset
中的select
方法
条件语句
循环表达式
这个脚本从变量定义开始:var i = 0
。类型推断将i判定为scala.Int
,因为这是初始值0
的类型。下一行的while
语法结构使得代码块(即花括号中间的部分)被不断地重复执行,直到boolean
表达式i < args.length
的值为false
。其中args.length
给出的是数组args
的长度。代码块包含了两个语句,各缩进2
个空格(这是Scala
推荐的缩进风格)。其中第一个语句println(args(i))
打印出第i
个命令行参数。而第二个语句i += 1
让变量i
自增1
。
注意Java
的++i
和i++
在Scala
中并不工作。要想在Scala
中让变量自增,要么用i = i + 1
,要么用i += 1
。
三种循环遍历结构:
val arrs="hsizm.cn"
var i =0;
while (i<arrs.length){
println(arrs(i));
i+=1
}
arrs.foreach(arr=>println(arr));
for(arr<-arrs){
println(arr)
}
- to :
1 to 10
(左闭右闭) 1.to(10) - range:
Range(1,10)
(左闭右开的) Range(1,10,2) (2为步长) - until :
1 until 10
(左闭右开)
to
、until
的底层调用都是Range
scala> 1 to 10
res1: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> Range(1,10)
res2: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
scala> 1.to(10)
res3: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> Range(1,10,2)
res4: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
scala> Range(1,10,5)
res5: scala.collection.immutable.Range = Range(1, 6)
scala> Range(10,1,-1)
res8: scala.collection.immutable.Range = Range(10, 9, 8, 7, 6, 5, 4, 3, 2)
scala> 1 until 10
res9: 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.until(10, 2)) {
println(i)
}
for(i <- 1 to 10 if i % 2 == 0) {
println(i)
}
val courses = Array("Hadoop", "Spark SQL", "Spark Streaming", "Storm", "Scala")
for(x<- courses) {
println(x)
}
//x其实就是courses里面的每个元素
// => 就是将左边的x作用上一个函数,变成另外一个结果
courses.foreach(x=> println(x))
- while
var (num, sum) = (100, 0)
while(num > 0){
sum = sum + num
num = num - 1
}
println(sum)