设为首页 加入收藏

TOP

Scala(一):函数、流程控制、参数
2019-08-15 00:11:17 】 浏览:74
Tags: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,2,0,1,2,0,1,2,0,1)
while循环:while(条件语句){循环体}
dowhile循环在此不多做表述
循环变量的作用域一直持续到循环结束
说明:Scala中并没有提供break或者continue语句退出循环。那么如果需要break的时候我们怎么办呢?有如下选项:
  1.使用Boolean型的控制变量
  2.使用嵌套函数,你可以从函数中return
  3.使用Breaks对象中的break方法

提示:欢迎大家批评指正,一起交流,一起进步。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS Swift WisdomHUD 提示界面框架 下一篇Scala(二):元组、数组、映射

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目