Scala简介

Scala简介

1. Scala概述

 

 

 

 

官方网址:http://www.scala-lang.org/

1. Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言 、并集成面向对象编程函数式编程的各种特性。Scala 发音为(/ˈskɑːlə, ˈskeɪlə/)

Scala编程语言很多开发者所喜爱。如果你粗略浏览Scala的网站,你发现Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。

2. Scala有几项关键特性表明了它的面向对象的本质。例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。

3. 与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。Scala允许定义新类的时候重用一个类中新增的成员定义(即相较于其父类的差异之处)Scala称之为mixin类组合。

4. Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数Nested Function)、序列解读(Sequence Comprehensions)等等。

5. Scala是静态类型的,这就允许它提供泛型类内部类、甚至多态方法(Polymorphic Method)。另外值得一提的是,Scala被特意设计成能够与Java.NET互操作。Scala当前版本还不能在.NET上运行(虽然上一版可以-_-b),但按照计划将来可以在.NET上运行。

6. Scala可以与Java互操作。它用scalac这个编译器源文件编译成Javaclass文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。它可以访问现存的数之不尽的Java类库,这让大多数Java开发者迁移到Scala更加容易。

7. Scala可以使用为Java1.45.0或者6.0编写的巨量的Java类库和框架,Scala会经常性地针对这几个版本的Java进行测试。Scala可能也可以在更早版本的Java上运行,但没有经过正式的测试。ScalaBSD许可发布,并且数年前就已经被认为相当稳定了。

 

 

 

2.平台和许可证

1. Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。它也能运行于Java ME, CLDCJava Platform, Micro Edition Connected Limited Device Configuration)上。还有另一.NET平台的实现,不过该版本更新有些滞后。

2. Scala的编译模型(独立编译,动态类加载)与JavaC#一样,所以Scala代码可以调用Java类库(对于.NET实现则可调用.NET类库) 。

3. Scala包中包含了编译器和类库,以BSD许可证发布。

 

 

 

3.发展历史

1. 联邦理工学院洛桑(EPFL)的Martin Odersky2001年基于Funnel的工作开始设计ScalaFunnel是把函数式编程思想和Petri网相结合的一种编程语言。Odersky先前的工作是Generic JavajavacSun Java编译器)。Java平台的Scala2003年底/2004年初发布。.NET平台的Scala发布于20046月。该语言第二个版本,v2.0,发布于20063月。

2. 截至20099月,最新版本是版本2.7.6Scala 2.8预计的特性包括重写的Scala类库(Scala collections library)、方法的命名参数和默认参数、包对象(package object),以及Continuation.

3. 20094月,Twitter宣布他们已经把大部分后端程序从Ruby迁移到Scala,其余部分也打算要迁移。此外,Wattzon已经公开宣称,其整个平台都已经是基于Scala基础设施编写的。

 

 

 

4.Scala社区的发展

1. 一门语言不能孤立地存在,必须提供依附的平台,以及围绕它建立的生态圈。不如此,语言则不足以壮大。Ruby很优秀,但如果没有Ruby On Rails的推动,也很难发展到今天这个地步。Scala同样如此。反过来,当我们在使用一门语言时,也要选择符合这门语言的技术栈,在整个生态圈中找到适合具体场景的框架或工具。

2. 当然,我们在使用Scala进行软件开发时,亦可以寻求庞大的Java社区支持;可是,如果选择调用Java开发的库,就会牺牲掉Scala给我们带来的福利。幸运的是,在如今,多数情况你已不必如此。伴随着Scala语言逐渐形成的Scala社区,已经开始慢慢形成相对完整的Scala技术栈。无论是企业开发、自动化测试或者大数据领域,这些框架或工具已经非常完整地呈现了Scala开发的生态系统。

 

 

 

 


5.Scala编程语言特性:


快速实验:   Scala有交互式命令行(REPL),可以在上面快速的试各种语法和代码。这对学习新特性,或者实验新想法非常有用。

一致性:  尽管Scala融合了静态类型系统、面向对象、函数式编程等语言特性,但却很少能看出融合的痕迹。Scala是我见到融合最多语言特性而又不显得杂乱的编程语言之一。


类型安全 Scala创始人是教授,他先带领创建了Java 5编译器,而后觉得Java有太多羁绊而发明了ScalaScala编译器和类型系统非常强大,它的目标是尽量把软件错误消灭在编写过程中。Scala类型系统是图灵完备的,甚至可以在编译期间解决问题。


面向对象:  Scala是面向对象的编程语言,所有的变量和方法都封装在对象中,可以把信息封装起来供外部使用。

函数式编程: Scala同时又是函数式编程语言,函数可以独立存在,可以定义一个函数作为另一个函数的返回值,也可以接受函数作为函数的参数。这给组合函数带来了很大的便利。如何把面向对象编程形容成搭积木的话,函数式编程就像拼线条,更灵活和更有创意。

异步编程:  由于函数式编程提倡变量不可变,使异步编程变得非常容易。同时Scala提供的Futureakka类库,使得异步编程变得非常容易。

基于JVM:  Scala会被编译成为jvm bytecode,所以Scala能无缝集成已有的Java类库。你可以非常自然的使用已经存在的非常庞大且稳定的Java类库,比如小巧好用的apache.common.*,或者Java上的各种工具类库。

静态类型:  Scala是具备类型系统,通过编译时的检查,保证代码的安全性和一致性。类型系统具体支持以下特性:泛型类,型变注释(Variance Annotation),类型继承结构的上限和下限,把类别和抽象类型作为对象成员,复合类型,引用自己时显式指定类型,视图,多态方法。

扩展性:  Scala的设计承认一个事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:任何方法可用作前缀或后缀操作符,可以根据预期类型自动构造闭包。联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。

其他特定:

更高层的并发模型Actor

轻量级的函数语法

高阶

嵌套

局部套用(Currying)

与XML集成,可在Scala程序中直接书写XML,可将XML转换成Scala类

与Java无缝地互操作

因为如此众多特性,用Scala可以优雅地编写简洁的代码,同时又能减少很多低级错误;能快速进行开发,又能保证系统性能、团队协作和长期维护。Scala的风格和特性已经吸引了大量的开发者。总而言之,Scala是一种函数式面向对象语言,它融汇了许多前所未有的特性,而同时又运行于JVM之上。随着开发者对Scala的兴趣日增,以及越来越多的工具支持,无疑Scala语言将成为你手上一件必不可少的工具。

Scala还有更多被证明是非常有用的特性,如嵌套类,currying和代数类型模式匹配。它还支持类似于JDK1.5所增加的泛型和注解。这些还都只是冰山一角。

 

 

 

6.Scala技术栈

若要了解Scala技术栈,并快速学习这些框架,一个好的方法是下载typesafe推出的Activator。它提供了相对富足的基于Scala以及Scala主流框架的开发模板,这其中实则还隐含了typesafeScala开发提供的最佳实践与指导。

当下主要的基于Scala开发的框架与工具,涉及到的领域包括:

Database

Web Frameworks

i18n

Authentication

Testing

JSON Manipulation

Serialization

Science and Data Analysis

Big Data

Functional Reactive Programming

Modularization and Dependency Injection

Distributed Systems

Extensions

Android

HTTP

Semantic Web

Metrics and Monitoring

Sbt plugins

 

 

 

 

7.Scala学习技巧

1、不要陷入C++一样的、不断膨胀的问题里,留下太多的选择,且没有清晰的最佳实践。这导致每个人都在选择不同的子集。要提供适应的指导。

2、记住,反对不良的设计功能与增加新功能同等重要。这很残酷。

3、考虑拆分语言为产生环境创建可行的标准。为学术世界节省成本是一个明智的选择。迎合企业的需要,获得更大的采用。

4、库的编写者应该看看Java API,确认是否应该有功能调用或结构化功能,为了更好的阅读。不要为了流动性在跳跃太大来与Ruby竞争。

5、最后,当人们提出的建设性的批评时,不要感到失望。如果同样的报怨不断出现,那就说明应该重视一下

 

 

 

8.总结:

你可以把scala当做在java语言上做的一层抽象。scala编译器会将scala源码编译成bytecode and run in jvm. scala语言保留了java语言的面向对象的特性,并增加了许多亮点,例如类参数,trait关键字等等。程序员可以用十分简洁的代码表达许多复杂的逻辑和组件。除此之外,scala也是一门函数式语言,具有许多函数式的特性,例如function literal , high-level function lamda等等。函数式的表达让用户逻辑更加清晰,代码更加简洁。
关于scala这门语言名字的由来,可以很容易联想到scalable,可扩展的。为什么这么说呢?应为scala的设计理念是less build-in control abstract.开发人员将大量的操作都以高阶函数和库的形式来向用户提供,scala的内置操作很少,甚至比c语言还少。用户可以根据自己的需要来订制操作。
目前,scala在国外比较火,twrriter已经将自己全部的代码从ruby转到了scala.除此之外,AMPLab的大部分核心产品都是由scala开发的,例如最近非常火的大数据分析机器spark

 

 

 

 

 

9.Scala学习建议的书籍:

 

Programming in Scala

Scala for the Impatient

Scala in Depth

《快学Scala

 

 

 

 

 

10.代码示例:

Hello World:

  1. object Test {
  2.    def main(args: Array[String]) {
  3.       print("Hello World ") 
  4.    }
  5. }



函数:

  1. object Test {
  2.    def main(args: Array[String]) {
  3.         println( "Returned Value : " + addInt(5,7) );
  4.    }
  5.    def addInt( a:Int, b:Int ) : Int = {
  6.       var sum:Int = 0
  7.       sum = a + b
  8.       return sum
  9.    }
  10. }

 

 

类:

  1. class Test{
  2.    def sum(a: Int, b: Int):Int = {
  3.         return a+b
  4.    }
  5. }
  6.  
  7. object TestDemo {
  8.    def main(args: Array[String]) {
  9.       val t = new Test()
  10.       println(t.sum(3,9))
  11.         
  12.    }
  13. }

 

 

I/O流:

  1. import scala.io.Source
  2.  
  3. object Test {
  4.    def main(args: Array[String]) {
  5.       println("test.txt ‘ s contents" )
  6.       Source.fromFile("test.txt" ).foreach{
  7.          print
  8.       }
  9.    }
  10. }


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值