scala
前言
这是一个scala语言学习的系列文章
一、scala语言基本介绍
scala的预期目标是将面向对象,函数式编程和强大的系统类型结合起来,同时让人写出优雅,简洁的代码;
scala博采众长,scala采用了java和c#语法的大部分,而他们大部分借自于C,C++语法。表达式,语句,和代码块和java一样,还有类,包和引用的语法。除语法之外,Scala还采用了java的其他元素,如它的基本类型,类库和它的执行模式。函数式编程借鉴了SML,OCaml,和F#为代表的ML家族语言很接近,scala的隐式参数灵感来自Hsskell,基于actor的并发库来自Eelang的思想。
一:scala语言特点
面向对象:
Scala是一种面向对象的语言,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值,数字等)在内,连函数也是对象。
类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。
类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。
函数式编程:
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量化的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala和case class及其内置的模式匹配用于函数式编程语言中常用的代码类型。更进一步,程序员可以利用scala的模式匹配,编写类似正则表达式的代码处理XML数据。
静态类型:
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。
类型系统具体支持以下特性:
- 泛型类
- 协变和逆变
- 标注
- 类型参数的上下限约束
- 把类别和抽象类型作为对象成员
- 复合类型
- 引用自己时显示指定类型
- 视图
- 多态方法
扩展性:
Scala的设计秉承意向事实,即在世间中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。
Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:
- 任何方法可用作前缀或后缀操作符
- 可以根据预期类型自动构造闭包
并发性:
Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱收发消息。
Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。
函数式编程:
函数式编程是一种"编程范式",也就是如何编写程序的方法论。
纯粹的函数式编程语言编写的函数没有变量,因此,任何一个函数,只要输入是确定的,输出就是确定的,这种纯粹函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
##函数式编程的特点:
- 函数式一等公民
- 以表达式为中心
- 无副作用
只用纯函数来构造程序,或者说函数没有副作用。什么是副作用?一个带有副作用的函数不仅有一个返回值,还可能做了修改一个变量 直接修改数据结构 设置一个对象的成员 打印到终端或者读取用户输入 读取或者写入一个文件 在屏幕上绘画 抛出一个异常或以一个错误终止 一个函数在程序执行过程中除了根据输入参数给出运算结果外,没有其他影响,就称之为没有副作用的。
不修改状态
引用透明
函数式编程优势:
- 代码简洁,开发速度快
- 接近自然语言,易于理解
- 易于代码管理
- 适合并发编程
- 适用于热升级
函数式编程的一个特点就是,函数也是值,同时允许把函数本身作为参数传入另一个函数,还允许函数返回一个函数!
tips:
静态语言和动态语言
静态编译语言:实现声明变量类型,类型不能改变,编译时检查;
动态编译语言:不用实现声明类型,随时可以赋值为其他类型,编程时不知道什么类型,很难判断;
静态语言和动态语言关键区别是何时获得类型信息,是在编译时间还是在运行时间;
强类型和弱类型
强类型语言:不同类型之间操作,必须强制类型转换为同一类型
弱类型语言:不同类型间可以操作,自动隐式转换。
强类型和弱类型语言的区别关键是类型之间的区别是否严格,例如语言是否会做字符串类型到数字类型的隐式转换。
java和Scala都是静态强类型语言,Python是动态强类型语言;
二、使用步骤
1.使用scala之前需要需要现在本地下载scala,下载地址:
https://www.scala-lang.org/download/
注意: scala要求的jdk版本是1.8的;
2.idea中引入scala插件
直接在插件市场搜索scala插件,然后安装即可;
总结
scala入门知识介绍;