Scala 语法特性 (二): 控制语句及函数方法
控制语句
Scala的条件和循环语句和大多数语言类似,不同的是Scala不支持break和continue语句,关于这一点Scala给的解释:
多数情况下,continue和break是不必要的,可以用小函数更好地解决。
在循环当中使用continue是非常容易理解的,但是在Scala的函数闭包中是难以解释的
如果巧妙地使用函数字面量代替continue和break,可以使代码更加精简。
开发人员表示可以以纯库函数的形式提供对两者的支持。
在Scala2.8版本之后提供了util.control.Breaks._
库来使用break操作,下面计算从0到1000的数值之和,当和大于1000时,退出不再累加并打印出计算出的累计值。
但是对于continue
还是没有支持,可以通过类似下面的例子来实现,下面打印0到10中的奇数:
补充于2020年11月30日
模式匹配
在C++、Java中Switch控制语句中case执行结束,需要添加break,否则会出现错误,在Scala中,通过模式匹配来解决这个问题。相关实现示例如下:
执行结果:
函数和方法
在Scala中函数(Function)也是一个对象,借用函数式编程思想,函数可以作为参数传递给另外一个函数,而方法(Method)指类中定义的方法,属于类的一部分,不可以作为一个参数传入方法中。
函数式一个完整的对象,本质上继承了Trait类的对象。
使用val语句定义函数,使用def定义方法,方法名称后紧跟一个空格加下划线,可以将方法转换为函数,编译器会自动完成该操作。
下面简单实现一个加法器
可变参数列表
指在函数调用时灵活传入一个变长数组,在Scala中通过在类型之后加星号,将其设置为可变参数。只有函数最后一个参数可以设置为可重复的可变参数列表。
执行结果:
默认参数值
传入默认参数值和C++比较像,传入默认值之后相关参数可以不传递参数。下面实现一个对某个数字进行递增:
执行结果:
偏应用函数
偏应用函数指的是,将方法当中的一个参数固定,然后重新声明为一个函数,是Scala的一种语法糖,在规模调用某个方法时,可以简化部分操作,同时方便对某一参数的修改。
指定函数参数名
Scala支持通过指定函数参数名而无需按照顺序向函数传递参数。
执行结果:
高阶函数
在Scala中,可以将函数作为参数或通过运算返回一个函数的引用,这种函数被称为高阶函数。
函数柯里化
函数柯里化指的是将原来接收两个参数的函数变成新的接收一个参数的函数的过程,新函数返回以原有第二个参数为参数的函数。
参考资料
书籍《Spark Streaming 实时流式大数据处理实战》
https://blog.csdn.net/lovehuangjiaju/article/details/47176829
版权声明: 本文为 InfoQ 作者【大规模数据处理学习者】的原创文章。
原文链接:【http://xie.infoq.cn/article/7894a886d102ba7eecd8c9e16】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论