最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

Ruby高手点评Scala编程语言十大绝招

[复制链接]
跳转到指定楼层
楼主
发表于 2014-11-25 12:39:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 乔帮主 于 2014-11-25 12:41 编辑

[AppleScript] 纯文本查看 复制代码
// 一个简单的构建  
def loop(range: Range)(op: Int=> Unit) {  
range foreach (op)   
}     
 
loop(1 to 5){println} // 1 2 3 4 5   
loop(1 to 5){x => if (x % 2 == 0) println(x)} // 2 4

  还有几个更为复杂的例子,Actor lib,它是作为扩展被添加到 Scala 这一语言中的,我们将在下文中对它展开讨论。
  不过,Scala 之所以是可扩展的,在于互相关联的两点:它是真正的面向对象的语言和真正的函数式语言。
  面向对象
  Scala 中每个事物都是对象(对象的方法除外),因此,没有必要对基本(primitive)类型或引用类型进行区分,这就是所谓的:统一对象模型(Uniform Object Model)。但是,正如我之前在优化流程中所提到的,值类型对象被转换为 Java 基本类型,因此不必担心性能的问题。其内部还包含为类方法分组的单件对象(Singleton object)。
  ◆所有操作都是方法调用,+ - * ! / 都是方法,因此,没有必要进行操作符重载。
  ◆非常精细的访问控制,用户可以控制对某些包的某些方法的访问。
  ◆Scala 具有  trait,与 Ruby 中的 mixin 类似,就像 Java 中的 interfaces,但实现了某些它们的方法,因此,用户在箱体(box)之外拥有富封装器(wrapper)和富交互接口(interface)。
  函数式语言
  函数式语言具有很多特点,不过在扩展性这一语境中,我们所关心的是两个事实:
  ◆函数是第一等级(first-class)的值
  这表示用户可以将函数作为值传递,也可以作为值返回。这样可以获得简洁而具有可读性的代码,正如上文中作为示例的过滤代码段。
  ◆纯函数(pure function)
  Scala 支持没有副作用的纯函数,这意味着:如果你的输入相同,那么输出结果也总是相同。这样能够让代码更为安全,对代码测试也更为方便。
  但是,Scala 是通过什么方式来支持纯函数的呢?通过不变性(immutability):偏向固定的引用(与 java 中的 final 或其他语言中的 constant 类似)以及具有不变的数据结构,一旦创建便不可修改。
  不变性是拥有纯函数的安全保证,但并不是唯一的方式。没有不变性,你仍然可以编写安全的代码。这就是为什么 Scala 不是强制推行不变性而只是鼓励使用它。最终,你会发现 Scala 中许多数据结构具有了两种实现方式,一种是可变的,另一种是不可变的,不可变的数据结构是缺省导入的。
  每当提到不变性时,有人就会开始担心性能的问题,对于某些情况,这种担忧并非毫无来由,但对于 Scala,最终结果却与这一担忧相反。不可变的数据结构相对于可变的数据结构,更有助于获得较高的效率。其原因之一在于强大的垃圾收集器(garbage collector),与 JVM 中的垃圾收集器类似。
  更佳的并行模型
  当涉及到线程这一问题时,Scala 支持传统的 shared data 模型。但是,使用这种模型较长一段时间之后,许多人发现使用这种模型编写代码,非常难以实现以及进行测试。你总是需要考虑死锁问题和竞争条件。因此,Scala 提供了另一个称为 Actor 的并行模型,其中,actor 通过它的收件箱来发送和接收非同步信息,而不是共享数据。这种方式被称为:shared nothing 模型。一旦你不再顾虑共享数据的问题,也就不必再为代码同步和死锁问题而头痛。
  被发送信息的不变性本质以及 actor 中串行处理,这两者使得对于并行的支持更为简便。
  有关 Scala 并行的问题,请参阅这篇文章,对于这个概念你会有更好的理解。
  在讲述下一个要点之前,我需要提到这样一个事实,一些人将 Actor 的使用视为编程语言的一种进化。正如,Java 的出现,将程序员们从指针和内存管理的泥淖中拯救出来一样,Scala 的到来,让程序员们不必再为代码同步以及共享数据模型整天苦思冥想。



楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-26 23:17

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表