快速业务通道

面向Java开发人员的Scala指南 - Scala控制结构内部揭密 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
eme 之类的语言因为它们在更低级别的抽象上定义更高级别抽象的能力而受到人们的狂热追捧。编程人员可以使用高级抽象,用它们构建更高级的抽象。如今听到讨论这个过程时,它通常是关于特定于域的语言(或 DSL)的(请参阅 参考资料)。实际上,它只是关于如何在抽象之上构建抽象的过程。

在 Java 语言中,惟一选择就是利用 API 调用完成此操作;在 Scala 中,可以通过扩展语言本身实现它。试图扩展 Java 语言会带来创建极端场景(corner case)的风险,这些场景将威胁全局的稳定性。而试图扩展 Scala 则只意味着创建一个新库。

面向Java开发人员的Scala指南 - Scala控制结构内部揭密(2)

时间:2011-01-30 Ted Neward

If 结构

我们将从传统的 if 结构开始 —— 当然,此结构必须是最容易处理的结构之一,不是吗?毕竟,从理论上说,if 只检查一个条件。如果条件为真,则执行后面跟着的代码。

但是,这种简单性可能带有欺骗性。传统上,Java 语言对 if 的 else 子句的使用是随意的,并且假定如果条件出错,可以只跳过代码块。但在函数语句中,情况不是这样。为了保持函数语句的算术特性,所有一切都必须以表达式计算的方式出现,包括 if 子句本身(对于 Java 开发人员,这正是三元操作符 —— ?: 表达式 —— 的工作方式)。

在 Scala 中,非真代码块(代码块的 else 部分)必须以与 if 代码块中值种类相同的形式呈现,并且必须产生同一种类的值。这意味着不论以何种方式执行代码,总会产生一个值。例如,请参见以下 Java 代码:

清单 2. 哪个配置文件?(Java 版)

// This is Java String filename = "default.properties"; if (options.contains("configFile"))   filename = (String)options.get("configFile");

因为 Scala 中的 if 结构自身就是一个表达式,所以重写上述代码会使它们成为清单 3 中所示的更正确的代码片段:

清单 3. 哪个配置文件?(Scala 版)

// This is Scala val filename =   if (options.contains("configFile"))    options.get("configFile")   else    "default.properties"

尽管真正的赢家是 Scala,但可以通过编写代码将结果分配给 val,而不是 var。在设置之后,就无法对 val 进行更改,这与 Java 语言中 final 变量的操作方式是相同的。不可变本地变量最显著的副作用是很容易实现并发性。试图用 Java 代码实现同样的操作时,会带来许多不错的、易读的好代码,如清单 4 中所示:

清单 4. 哪个配置文件?(Java 版,三元式)

//This is Java final String filename =   options.contains("configFile") ?    options.get("configFile") : "default.properties";

用代码评审解释这一点可能需要点技巧。也许这样做是正确的,但许多 Java 编程人员会不以为然并且询问 “您做那个干什么”?

已公开的 while 结构

接下来,让我们来看一下 while 及其同胞 do-while。它们做的基本上是同一件事:测试一个条件,如果该条件为真,则继续执行提供的代码块。

通常,函数语言会避开 while 循环,因为 while 实现的大多数操作都可以使用递归来完成。函数语言真地非常类似于 递归。例如,可以考虑一下 “Scala by Example”(请参阅 参考资料)中展示的 quicksort 实现,该实现可以与 Scala 实现一起使用:

清单 5. Quicksort(Java 版)

//This is Java void sort(int[] xs) {   sort(xs, 0, xs.length -1 ); } void sort(int[] xs, int l, int r) {   int pivot = xs[(l+r)/2];   int a = l; int b = r;   while (a <= b)  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号