经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
Scala(一):函数、流程控制、参数
来源:cnblogs  作者:奋斗的only  时间:2018/12/14 9:31:00  对本文有异议
  1. Function:函数
    函数的定义:
    def 函数名(参数):返回类型=函数实现体
    egdef abs(x:Long) : Long = if(x >= 0) x else -x
    你必须给出所有参数的类型。不过,只要函数不是递归的,你就不需要指定返回类型,。Scala编译器可以通过=符号右边的表达式的类型推断出返回类型
    如果函数体需要多个表达式完成,可以用代码块,块中最后一个表达式的值就是函数的返回值
    egdef function1(n:Int) = {
    var r = 1
    for(i <- 1 to n) r = r * i
    r
    }
    代码如下:
  1. /**
    * Created by strugglingonlydata
    *
  1. */
  1. 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. 参数
    1.默认参数
    我们在调用某些函数时并不显式的给出所有参数值,对于这些函数我们使用默认参数
    eg:
    def decorate(str:String,left:String="[",right:String="]")=left+str+right
    这个函数有两个默认的参数leftright,如果你调用decorate("hello"),打印结果为:[hello]
    或者你给出的参数值的数量不够,那么默认参数会从后往前逐个应用进来
    eg:decorate("hello","*"),打印结果为:*hello]
    2.带名参数
    你也可以在在提供参数值的时候指定参数名
    egdecorate(str="hello",left="*"right="*")
    带名参数并不需要跟参数列表的顺序完全一致
    3.变长参数
    egdef sum(i:Int*)={
    var result=0
    for(arg<- args) result +=arg
    result
    }
         
  1. val s =sum(1,2,10,20)

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

  1. 流程控制:
    1.条件表达式:if
    Scalaif/else语法结构与Java一样。不过在Scalaif/else表达式有值,这个值就是跟在if或者else后面的表达式的值
    egif(x>0) 1 else -1
    Scala中每个表达式都有值,如果没有值这个问题的解决方案就是引入Unit类,写作()
    eg:if(x>0) 1 else ()
    你可以把()当做是表示“无可用值”占位符,也就是Java中的void.
    提示:从技术上讲Javavoid没有值,但是ScalaUnit有一个表示"无值"的值
    2.循环:forwhiledowhile
    for循环:for (i<-表达式)
    说明:在for循环的变量之前并没有val或者var的指定。该变量的类型是集合的元素类型。
    增强for循环
    for(i<-表达式;j<-表达式)使用多个变量<-表达式的形式提供多个生成器,用分号隔开
    每个生成器都可以带一个守卫
    egif(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方法

    提示:欢迎大家批评指正,一起交流,一起进步。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号