Scala程序设计-Java虚拟机多核编程实践(一)

11 篇文章 3 订阅
  1. 对象一旦创建出来,就不再改变其内容,这样的对象是不变的。这样做可以无需顾虑多线程访问对象时的竞争管理,Java的String就是不变对象的一个例子。基于此,使用Scala创建多线程应用时,可以用不变状态(immutable state)编写无锁代码,从而写出简洁的多线程代码,而无需顾虑线程间的数据竞争,以及处理加锁和释放带来的梦魇。
  2. JVM上的其他语言Groovy、JRuby、Clojure怎么样呢?目前为止,能够同时提供函数式风格和良好并发支持的强类型语言,唯有Scala。
  3. Scala是Scalable Language的缩写,它是一门混合型的函数式编程语言,03年发不了第一个版本。
  4. 在Scala里,一切皆对象,比如2.toString()在java里会产生编译错误,然而在Scala里,调用的是Int实例的toString()方法。Scala偏爱简洁,其可以为你的小拇指从多年的虐待中提供一个喘息之机--分号在Scala中是可选的。在Scala中,根据上下文,点运算符也是可选的,括号也是。比如不用写s1.equals(s2);可以写s1 equals s2。去掉了分号、括号、点号。
  5. Scala真正的魅力在于内置规则极少,其余的,包括运算符,都是Scala程序库的一部分。
  6. val VS. var:val和var都是用来定义变量,用val定义的变量是不可变的,初始化之后,值就固定下来了,用var定义的变量是可变的,修改多少次都行。这里的不变性指的是变量本身,而不是变量所引用的实例,比如说,val buffer = new StringBuffer(),就不能把buffer指向其他的引用,但是依然可以用诸如append()之类的方法来修改buffer;在Scala中,优先使用val,而不是var,可以提升不变性和函数式风格。
  7.  for(i<-1 to 10){
          print(i+",")
        }
        for(i<-1 until 10){
          print(i+",")
        }
    其中to包括下界,而until不包括下界
  8. 在Scala中,创建多行字符串真的很容易,只要把多行字符串放在3个双引号间即可("""......"""),Scala允许在字符串里嵌入双引号,Scala会将三个双引号里的内容保持原样,在Scala里,称为原始字符串。
  9. Scala对==的处理不同于Java;它对于所有类型的处理都是一致的,在Scala里,无论类型如何,==都表示基于值的比较,而如果你想执行基于身份的比较,可以使用eq()方法,
    object HelloWorld {
      def main(args: Array[String]) {
        val s1 = new StringBuilder("abcdefg")
        val s2 = new StringBuilder("abcdefg")
        println(s1 == s2)//true   ->equivalent to java's s1.equals(s2)
        println(s1 eq s2)//false  ->equivalent to java's s1==s2
      }
    }
    注意,对于所有的类型来说,Scala的==处理都是一致的,避免了Java里使用==的混淆,然而,你必须记得这与Java在语义上的差异,以防发生意外。
  10. 在Scala中,继承一个基类跟Java的做法相似,多了两点限制,(1)重写方法需要override关键字;(2)只有主构造器才能往基类构造函数中传递参数。
  11. MarkerFactory就是一个单例,单例一旦定义完毕,它的名字就表示了这个单例对象唯一的一个实例,单例可以传给函数,就像通常传递实例一样。
    class Marker(val color: String) {
      println("creating " + this)
      override def toString(): String = "marker color " + color
    }
    object MarketFactory {
      private val markers = Map(
        "red" -> new Marker("red"),
        "blue" -> new Marker("blue"),
        "green" -> new Marker("green")
      )
      def getMarker(color: String) = if (markers.contains(color)) markers(color) else null
      def main(args: Array[String]) {
        println(MarketFactory getMarker ("blue"))
        println(MarketFactory getMarker ("blue"))
        println(MarketFactory getMarker ("red"))
        println(MarketFactory getMarker ("red"))
        println(MarketFactory getMarker ("yellow"))
      }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值