Scala 学习笔记(一)

来源:互联网 发布:celery python廖雪 编辑:程序博客网 时间:2024/05/16 16:00

Scala语言的名称来自于“可伸展的语言”。之所以这样命名,是因为他被设计成随着使用者的需求而成长。你可以把Scala应用在很大范围的编程任务上,从写个小脚本到建立个大系统。 Scala是很容易进入的语言。它跑在标准的Java平台上,可以与所有的Java库实现无缝交互。它也是用来编写脚本把Java 控件链在一起的很好的语言。但是用它来建立大系统和可重用控件的架构将更能够发挥它的力量。 Scala是一种把面向对象和函数式编程理念加入到静态类型语言中的混血儿。 

1.Scala允许用户在他们需要的方向上通过定义易用库来发展和改造语言,使得这些特性感觉上好像原生语言支持一样。 

Scala能培育出新的控制类结构:Scala让你增加新的类型,使得它们用起来方便得像内建类型一样。同样的扩展理念也应用在控制结构上。这种类型的扩展是由Scala的“基于行动类”的并发编程API阐明的。 随着近年多核处理器的激增,为了获取可接受的性能,你将必须在应用中运用更多的并行机制。常常这就意味着重写你的代码来让计算分布到若干并发线程上。不幸的是,创建依赖性的多线程程序在实践中被证明是非常具有挑战性的。Java的线程模型是围绕着共享内存和锁建立的,尤其是当系统在大小和复杂度都得到提升的时候,这种模型常常是不可理喻的。很难说程序里面没有资源竞争或潜藏的死锁——有些东西不是能在测试里面检验得出,而或许只在投入生产后才表现出来。而大致可以认为比较安全的可选方案是消息传递架构,例如在Erlang编程语言中应用的“行动类”方案。Java伴随着一个丰富的,基于线程的并发库。Scala可以像其他JavaAPI那样使用它编程。然而,Scala也提供了一个实质上实现了Erlang的行动类模型的附加库。 

2.Scala具有伸缩性

伸缩性受许多因素影响,范围从语法细节到控件的抽象构造。如果我们一定要说出Scala中有助伸缩性的一个方面,我们会把面向对象和函数式编程的组合拣出来 。

Scala把面向对象和函数式编程熔炼在一起,比其他的语言做的更好。比如说,其他语言或许把对象和方法作为两个概念,但Scala里面函数值就是对象,函数类型就是能够被子类继承的类,这从深层次上影响了可伸缩性;(这也就是函数和对象的联合方法)

3.Scala是面向对象的

面向对象动机非常简单:除了最琐碎的程序之外绝大多数需要某些结构;做到这点最简单的做法是把数据和操作放进某种形式上的容器。而面向对象里最伟大思想是把这些容器完全的通用化,这样就能像保存数据那样保存操作,并且可以存储到其他容器里或作为操作传递给操作,这样的容器就叫做对象;用这样的方法最简单的对象可以与完整的计算机有同样的架构原则:用形式化的接口绑定数据和操作。于是对象在语言伸缩性方面起了很大作用:构造小程序和大程序都可以应用同样的技术。 

相反,Scala是纯粹格式的面向对象的语言,每个值都是对象,每个操作都是方法的调用。例如:Scala里面1+2,实际上调用了定义在Int类里面的一个名为+的方法。

你可以用一个像操作符一样的名字定义方法,这样你的API的使用者就能按照操作符的标记使用了。 

4.Scala是函数式的

函数式编程有两种理念做指导,第一种理念是函数是第一类值。在函数式语言中,函数也是值,与,比如说,整数或字串,在同一个地位。你可以把函数当作参数传递给其他函数,当作结果从函数中返回或保存在变量里。 

5.Scala是简洁

//java里class MyClass {  private int index;  private String name;  public MyClass(int index, String name) {    this.index = index;    this.name = name;  }}//scala里class MyClass(index: Int, name: String)

根据这段代码,Scala编译器将制造有两个私有字段的类,一个名为indexInt类型和一个叫做nameString类型,还有一个用这些变量作为参数获得初始值的构造函数。这个构造函数还将用作为参数传入的值初始化这两个字段。一句话,你实际拿到了与罗嗦得多的Java版本同样的功能。Scala类写起来更快,读起来更容易,最重要的是,比Java类更不容易犯错。 

6.Scala是高层级的

// 在Java里boolean nameHasUpperCase = false;for (int i = 0; i < name.length(); ++i) {  if (Character.isUpperCase(name.charAt(i))) {    nameHasUpperCase = true;    break;  } }//scala里val nameHasUpperCase = name.exists(_.isUpperCase)

论断,_.isUpperCase,是一个Scala里面函数式文本的例子。它描述了带一个字符参量(用下划线字符代表)的函数,并测试其是否为大写字母。 


0 0
原创粉丝点击