关闭

Scala代码编写中常见的十大陷阱

发表于:2011-2-21 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿风 译    来源:51Testing软件测试网采编

#
java
#
JAVA
#
Java
#
Scala

  对于支持并发和分布式处理、高可扩展、基于组件的应用程序来说,Scala的功能是很强大的。它利用了面向对象和函数式程序设计的优点。这种基于Java虚拟机的语言在宣布Twitter正使用它时受到了最多的冲击。如果使用正确,Scala可以大量减少应用程序对代码的需求。

  对于Scala编程, 我们收集了这些常见代码编写中的陷阱。这些技巧来自于Daniel Sobral,一个曾参加过FreeBSD项目和Java软件开发工程的Scala狂热爱好者。

  1. 语法错误

  认为  “yield” 像 ”return” 一样。有人会这样写:

  • for(i <- 0 to 10) {  
  •   if (i % 2 == 0)  
  •     yield i  
  •   else 
  •     yield -i  
  • }
  •   正确的表示应该是:

  • for(i <- 0 to 10)   
  • yield {  
  •   if (i % 2 == 0)  
  •     i  
  •   else 
  •     -i  
  • }
  •   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特征。

  • object MyScalaApp extends Application {    
  •   // ... body ... 
  • }
  •   示例部分的问题在于,body部分在单元对象初始化时执行。首先,单元初始化的执行是异步的,因此你的整个程序不能与其它线程交互;其次,即时编译器(JIT)不会优化它,因此你的程序速度慢下来,这是没有必要的。

      另外,不能与其它线程的交互也意味着你会忘记测试应用程序的GUI或者Actors。

      4. 用法错误

      试图模式匹配一个字符串的正则表达式,而又假定该正则表达式是无界的:

  • val r = """(\d+)""".r  
  • val s = "--> 5 <---" 
  • s match {  
  •   case r(n) => println("This won't match")  
  •   case _ => println("This will")  
  • }
  • 41/41234>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号