Scala的概述及特点

您所在的位置:网站首页 下列哪个不是网络设计语言的特征 Scala的概述及特点

Scala的概述及特点

2024-07-12 23:12| 来源: 网络整理| 查看: 265

目录

一、大数据为什么学习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 ;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3