Scala的概述及特点

目录

一、大数据为什么学习Scala

二、 Scala起源

三、Scala特点

 1.面向对象

 2.函数式编程

 3.静态类型

 4.扩展性

 5.动态性

四、什么是函数式编程

函数式编程的特点:

 函数式编程优势:

五、什么是静态语言和动态语言

六、什么是强类型和弱类型语言


一、大数据为什么学习Scala

1. 优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员, API 是否优雅直接影响用户体验。
2. 速度快: Scala 语言表达能力强,一行代码抵得上 Java 多行,开发速度快; Scala 是静态编译的,所以和 JRuby ,Groovy比起来速度会快很多。
3. 能融合到 Hadoop 生态圈: Hadoop现在是大数据事实标准,Spark是由Scala开发的,Spark并不是要取代 Hadoop ,而是要完善 Hadoop 生态。JVM语言大部分可能会想到 Java ,但 Java 做出来的 API 太丑,或者想实现一个优雅的 API 太费劲。而Fink也有Scala的PAI接口

二、 Scala起源

        Scala名字由来: Scalable Language 两个单词相结合;意大利语中 “scala” 意为 梯子 楼梯 ,蕴含 更佳的编程语言”。         
        Scala之父 Martin Odersky (马丁 · 奥德斯基)于 2001 年基于 Funnel 的工作开始设计 Scala Funnel 是把函数式编程思想和Petri 网相结合的一种编程语言。 Martin Odersky 先前的工作是 Generic Java javac Sun Java 编译器)。
        Java平台的 Scala 2003 年底 /2004 年初发布。 .NET 平台的 Scala 发布于 2004 6 月。该语言第二个版本, v2.0 ,发 布于2006 3 月。截至2009年 9 月,最新版本是版本 2.7.6 Scala 2.8 预计的特性包括重写的 Scala 类库( Scala collections library)、方法的命名参数和默认参数、包对象( package object ),以及 Continuation
        2009年 4 月, Twitter 宣布他们已经把大部分后端程序从 Ruby 迁移到 Scala ,其余部分也打算要迁移。此外,Wattzon已经公开宣称,其整个平台都已经是基于 Scala 基础设施编写的。
        Scala 的预期目标是将面向对象、函数式编程和强大的类型系统结合起来,同时让人要能写出优雅、简洁的代码。
        Scala博采众长, Scala 采用了 Java C# 语法的大部分,而他们大部分借自于 C C++ 语法。表达式、语句、和代码块和Java 一样,还有类、包和引用的语法。除语法之外, Scala 还采用了 Java 的其他元素,如它的基本类型、类库和它的执行模式。函数式编程借鉴了SML OCaml ,和 F# 为代表的 ML 家族语言很接近, Scala 的隐式参数灵感来自Haskell,基于 actor 的并发库来自 EeLang 的思想。

三、Scala特点

 1.面向对象

        Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。 类可以被子类化,而且Scala 还提供了基于 mixin 的组合( mixin-based composition )。
        类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承 的种种问题。

 2.函数式编程

        Scala也是一种函数式语言,其函数也能当成值来使用。 Scala 提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala case class 及其内置的模式匹配相当于函数式编程语言中常用的代数类型。
           更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML 数据

 3.静态类型

        Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:
        - 泛型类
        - 协变和逆变
        - 标注
        - 类型参数的上下限约束
        - 把类别和抽象类型作为对象成员
        - 复合类型
        - 引用自己时显式指定类型
        - 视图
        - 多态方法

 4.扩展性

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

 5.动态性

        Scala使用 Actor 作为其并发模型, Actor 是类似线程的实体,通过邮箱发收消息。 Actor 可以复用线程,因此可以在程序中可以使用数百万个Actor, 而线程只能创建数千个。在 2.10 之后的版本中,使用 Akka 作为其默认 Actor 实现。

四、什么是函数式编程

        函数式编程是一种"编程范式"programming paradigm),也就是如何编写程序的方法论。

        纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

函数式编程的特点:

  • 函数是一等公民 :指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
  • 以表达式为中心
  • 无副作用 : 只用纯函数来构造程序,或者说函数没有副作用。 什么是副作用?一个带有副作用的函数不仅有一个返回 值,还可能做了:
         1.修改一个变量
        2.直接修改数据结构
        3.设置一个对象的成员
        4.打印到终端或者读取用户输入
        5.读取或写入一个文件
        6.在屏幕上绘画
        7.抛出一个异常或以一个错误终止
        一个函数在程序执行过程中除了根据输入参数给出运算结果外,没有其他的影响,就称为没有副作用的。
  • 不修改状态 :状态不能保存在变量中
  • 引用透明:不依赖外部变量或状态

 函数式编程优势:

  • 代码简洁,开发速度快
  • 接近自然语言,易理解
  • 易于代码管理:函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unittesting )和除错( debugging ),以及模块化组合。
  • 适合并发编程:函数式编程不需要考虑 " 死锁 " deadlock ),因为它不修改变量,所以根本不存在 " " 线程的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署" 并发编程" concurrency )。
  • 适用于热升级:函数式编程没有副作用,只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升级代码,不需要重启,也不需要停机
函数式编程的一个特点就是,函数也是值,同允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

五、什么是静态语言和动态语言

# 静态编译语言:实现声明变量类型,类型不能改变,编译时检查;
# 动态编译语言:不用事先声明类型,随时可以赋值为其他类型,编程时不知道什么类型,很难推断;
        静态语言和动态语言关键区别是何时获得类型信息,是在编译时间还是运行时间。

六、什么是强类型和弱类型语言

# 强类型语言:不同类型之间操作,必须强制类型转换为同一类型, print('a'+1):
# 弱类型语言:不同类型间可以操作,自动隐式转换。
        强类型和弱类型语言的区别关键是类型之间的区别是否严格,例如语言是否会做字符串类型到数字类型的隐式转换。
        

// 弱类型语言 JavaScript ,在线测试: http://jsrun.net/new
a = 1
b = a + "1" + "a" // 结果是 11a, 这里 a 成了字符串
c = a + 1 // 结果是 2 , 这里 a 则是数字型
// 强类型语言 :Java ,在线测试: http://www.dooccn.com/java/
int a = 2 ;
String b = String . valueOf ( a ) + "1" + "a" ;
int c = a + 1 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值