经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
Scala(一):函数、流程控制、参数
来源:cnblogs  作者:奋斗的only  时间:2018/12/14 9:31:00  对本文有异议
Function:函数
函数的定义:
def 函数名(参数):返回类型=函数实现体
eg:def abs(x:Long) : Long = if(x >= 0) x else -x
你必须给出所有参数的类型。不过,只要函数不是递归的,你就不需要指定返回类型,。Scala编译器可以通过=符号右边的表达式的类型推断出返回类型
如果函数体需要多个表达式完成,可以用代码块,块中最后一个表达式的值就是函数的返回值
eg:def function1(n:Int) = {
var r = 1
for(i <- 1 to n) r = r * i
r
}
代码如下:
/**
* Created by strugglingonlydata
*
  */
object Function {
def abs(x: Long): Long = if (x >= 0) x else -x


def function1(n: Int) = {
var r = 1
for (i <- 1 to n) r = r * i
r
}

//无参函数
def doWhile(): Unit = {
var line = ""
do {
line = readLine()
println("Read:" + line)
} while (line != "")
}

//有参函数
def looper(x: Long, y: Long): Long = {
var a = x
var b = y
while (a != 0) {
val temp = a
a = b % a
b = temp
}
b
}

//在main这个函数中,它是不明确返回值的所以在此用Unit做返回类型
def main(args: Array[String]): Unit = {
//无参调用的时候也可以不加()
doWhile()
//有参函数的调用
println(looper(100,298))
}
参数
1.默认参数
我们在调用某些函数时并不显式的给出所有参数值,对于这些函数我们使用默认参数
eg:
def decorate(str:String,left:String="[",right:String="]")=left+str+right
这个函数有两个默认的参数left和right,如果你调用decorate("hello"),打印结果为:[hello]
或者你给出的参数值的数量不够,那么默认参数会从后往前逐个应用进来
eg:decorate("hello","*"),打印结果为:*hello]
2.带名参数
你也可以在在提供参数值的时候指定参数名
eg:decorate(str="hello",left="*",right="*")
带名参数并不需要跟参数列表的顺序完全一致
3.变长参数
eg:def sum(i:Int*)={
var result=0
for(arg<- args) result +=arg
result
}
     
     val s =sum(1,2,10,20)

变长参数得到的是一个类型为Seq的参数

流程控制:
1.条件表达式:if
Scala的if/else语法结构与Java一样。不过在Scala中if/else表达式有值,这个值就是跟在if或者else后面的表达式的值
eg:if(x>0) 1 else -1
在Scala中每个表达式都有值,如果没有值这个问题的解决方案就是引入Unit类,写作()
eg:if(x>0) 1 else ()
你可以把()当做是表示“无可用值”占位符,也就是Java中的void.
提示:从技术上讲Java中void没有值,但是Scala中Unit有一个表示"无值"的值
2.循环:for、while、dowhile
for循环:for (i<-表达式)
说明:在for循环的变量之前并没有val或者var的指定。该变量的类型是集合的元素类型。
增强for循环
for(i<-表达式;j<-表达式)使用多个变量<-表达式的形式提供多个生成器,用分号隔开
每个生成器都可以带一个守卫
eg:if(i<-1 to 3; j <- 1 to 3 if i!=j)
for的推导式
如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值
eg:for(i <- 1 to 10) yield i % 3
生成:Vertor(1,2,0,1,2,0,1,2,0,1)
while循环:while(条件语句){循环体}
dowhile循环在此不多做表述
循环变量的作用域一直持续到循环结束
说明:Scala中并没有提供break或者continue语句退出循环。那么如果需要break的时候我们怎么办呢?有如下选项:
  1.使用Boolean型的控制变量
  2.使用嵌套函数,你可以从函数中return
  3.使用Breaks对象中的break方法

提示:欢迎大家批评指正,一起交流,一起进步。
 友情链接: NPS  问卷模板