对于支持并发和分布式处理、高可扩展、基于组件的应用程序来说,Scala的功能是很强大的。它利用了面向对象和函数式程序设计的优点。这种基于Java虚拟机的语言在宣布Twitter正使用它时受到了最多的冲击。如果使用正确,Scala可以大量减少应用程序对代码的需求。
对于Scala编程, 我们收集了这些常见代码编写中的陷阱。这些技巧来自于Daniel Sobral,一个曾参加过FreeBSD项目和Java软件开发工程的Scala狂热爱好者。
1. 语法错误
认为 “yield” 像 ”return” 一样。有人会这样写:
正确的表示应该是:
2. 误用和语法错误
滥用scala.xml.XML.loadXXX。这个的语法分析器试图访问外部的DTD、strip组件或类似的东西。在scala.xml.parsing.ConstructingParser.fromXXX中有另一个可选的语法分析器。同时,在处理XML时忘记了等号两端的空格。比如:
val xml=<root/> |
这段代码真正的意思是:
val xml.$equal$less(root).$slash$greater |
这种情况的发生是由于操作符相当随意,而且scala采用这样一种事实:字母数字字符与非字母数字字符通过下划线可以结合成为一个有效的标识符。这也使得“x+y”这样的表达式不会被当成一个标识符。而应该注意 “x_+”是一个有效的标识符。所以,赋值标识符的写法应该是:
val xml = <root/> |
3. 用法错误
为那些根本不是无关紧要的应用加入Application特征。
示例部分的问题在于,body部分在单元对象初始化时执行。首先,单元初始化的执行是异步的,因此你的整个程序不能与其它线程交互;其次,即时编译器(JIT)不会优化它,因此你的程序速度慢下来,这是没有必要的。
另外,不能与其它线程的交互也意味着你会忘记测试应用程序的GUI或者Actors。
4. 用法错误
试图模式匹配一个字符串的正则表达式,而又假定该正则表达式是无界的: