Scala 学习笔记(2)
2019独角兽企业重金招聘Python工程师标准>>>
一、条件表达式,if else是可以返回值的,if (x > 0) 1 else -1,这个表达式的返回值是Int类型,-1或者1。所以可以这么写val i = if (x > 0) 1 else -1 ,其实我更喜欢这么写 if (x > 0) i=1 else i=-1,前者更加函数化,用val就行,后者更加指令化,必须用var。
二、Unit,if (x > 0) 1,x > 0的话,返回值是1,这个没有问题,可是x < 0怎么办呢?这个表达式没有返回值,没关系,Scala当中有一个Scala.Unit,写作(), 就相当于void 。
三、关于分号,scala当中可写可不写,但有一种情况必须写,一行写了多个语句,其实这个事不知道也行,干嘛非要一行写多个语句。
四、块表达式,java当中也有差不多的东西,不同的是,scala这东西也是有返回值的,返回值就是 x + y ,最后一句话是x + y,这在java当中是不可理解的东西,但是scala当中,这个就相当于是这个块表达式的返回值。
val res = { val x = 10; val y = 20; x + y }
五、While,scala和java没有明显区别,按照我的理解,while是比较指令化的东西,在scala当中尽量避免使用。
六、For, for(i <- 1 to 10) println(i),这是scala当中for的典型样子,跟java当中for (String str : String[])写法是类似的,这个东西在scala当中常用,下面有更详细的介绍。
七、高级for循环,1、多层循环不用写多个for;2、for的括号内,可以写很多语句;3、每个生成器后面可以带一个守卫
for (i <- 1 to 10 if i % 2 == 0; toValue = 5; j <- 1 to toValue if j % 2 == 0) println(i, j)
八、for推导式,for语句之所以在scala当中更加受宠,因为它也能有返回值。下面语句的返回值是Vector((2,2), (2,4), (4,2), (4,4), (6,2), (6,4), (8,2), (8,4), (10,2), (10,4))
for (i <- 1 to 10 if i % 2 == 0; toValue = 5; j <- 1 to toValue if j % 2 == 0) yield (i, j)
九、函数,不需要return,最后一个表达式的值就是返回值,也就是x或者-x
def abs(x : Int) = if (x > 0) x else -x
十、默认参数和带名参数,这里充分体现了scala的灵活性
def concat(value : String, left : String = "[", right : String = "]") = left + value + right
十一、变长参数,终于又减到一个跟java差不多的概念
def sum(args : Int*) = {累加操作}
十二、过程,这里其实也跟java差不多,void开头的方法在java当中可以称之为过程,而在scala当中,没有返回值的函数,也可以称之为过程,不过在scala当中,强调的是函数化的编程,所以,一个函数返回值以外的操作,被称之为副作用。过程有以下两种写法:
def printSelf(str: String) {print(str)}或 def printSelf(str: String) :Unit = {print(str)}
十三、lazy val变量的延迟加载,在第一次访问的时候,在实际加载值
十四、异常,无受检机制,也有返回值,Nothing
转载于:https://my.oschina.net/dongtianxi/blog/731277
总结
以上是生活随笔为你收集整理的Scala 学习笔记(2)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: apache占用80端口,导致nginx
- 下一篇: 网址汇总