加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala(一):函数、流程控制、参数

发布时间:2020-12-16 09:01:16 所属栏目:安全 来源:网络整理
导读:Function:函数 函数的定义: def 函数名(参数):返回类型=函数实现体 eg:def abs(x:Long) : Long = if(x = 0) x else -x 你必须给出所有参数的类型。不过,只要函数不是递归的,你就不需要指定返回类型,。Scala编译器可以通过=符号右边的表达式的类型推断出
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,1,1)    while循环:while(条件语句){循环体}    dowhile循环在此不多做表述  循环变量的作用域一直持续到循环结束  说明:Scala中并没有提供break或者continue语句退出循环。那么如果需要break的时候我们怎么办呢?有如下选项:    1.使用Boolean型的控制变量    2.使用嵌套函数,你可以从函数中return    3.使用Breaks对象中的break方法提示:欢迎大家批评指正,一起交流,一起进步。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读