Scala

Posted dbnixi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala相关的知识,希望对你有一定的参考价值。

1、什么是Scala

Scala是一个面向对象和面向函数式的多范式编程语言,并且Scala还是基于JVM的编程语言,Scala运行于Java平台,兼容现有Java程序。

面向对象:Scala是纯面向对象的编程语言,在Scala编程的世界里 “每个值都是对象,每个符号都是方法操作”。

面向函数:函数是一个对象。它跟字符串、数值具有同等地位,也就是说函数可以赋值给一个变量、可以作为方法的参数、可以作为方法的返回值。函数f(x)=>y 这种操作在程序中是一个输入到输出的映射关系。比如 f(x)=>x*x 此时输入是x ,输出是x的平方,并且在整个过程中x的值不会被修改。

 

2、Scala的优点

1、优雅:Scala语言设计非常贴合程序开发思维方式,并且能够很轻松的实现复杂的功能。

2、兼容:Scala是基于JVM的编程语言,并且是静态类型,能够跟java语法相互兼容,且具有可移植的特性。

3、速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快。

4、语言表达能力强:Scala的语法结构非常简单,但是其表达能力很强。

5、能融合到Hadoop生态圈: Scala是目前大数据处理框架Spark以及消息中间件Kafka的基础开发语言,能够很容易融入大数据生态圈。

 

3、Scala的常用类型

字符串类型:String

布尔类型:Boolean

浮点类型:Float、Double

整数类型:Byte 、Short、Char、Int、Long

 

4、Scala的运算符

位运算符:>> <<

逻辑运算符:&& || !

算数运算符 : + - * / %

比较运算符:> < >= <=

 

5、Scala的数据结构

集合 Set

列表 List

映射 Map

数组 Array

元组 Tuple

 

6、Scala的面向对象

Java是面向对象的编程语言,Scala语言来自于Java,所以天生就是面向对象的语言,而且Scala是纯粹的面向对象的语言,即在Scala中,一切皆为对象。

 

7、Scala的构造器

 构造器又叫构造方法,是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。

Scala构造对象需要调用构造方法,并且可以有任意多个构造方法。

Scala类的构造器包括: 主构造器(一个) 和 辅助构造器(多个)。

Scala构造器作用是完成对新对象的初始化,构造器没有返回值。

主构造器的声明直接放置于类名之后。

主构造器会执行类定义中的所有语句。

 

8、Scala的模式匹配

模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。如果所有case都不匹配,那么会执行case的分支。

Scala有一个十分强大的模式匹配机制,可以应用到很多场合,并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配。

 

9、Scala的高阶函数

Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等。作为值的函数,可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用。匿名函数,在Scala中,不需要给每一个函数命名,没有被赋给变量的函数叫做匿名函数,由于Scala可以自动推断出参数的类型,所有可以写的更精简一些。闭包函数,闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量,闭包通常来讲可以简单的认为是可以访问不在当前作用域范围内的一个函数。柯里化函数,柯里化指的是将原来接受多个参数的函数变成新的接受一个参数的函数的过程, 新函数的参数接受原来的第二个参数为唯一参数, 如果有n个参数, 就是把这个函数分解成n个新函数的过程。

 

10、Scala的隐式转换

隐式转换函数是以implicit关键字声明的带有单个参数的函数。这种函数将会自动应用,将值从一种类型转换为另一种类型。隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名有关。隐式函数可以有多个,但是需要保证在当前环境下,只有一个隐式函数能被识别。

 

以上是关于Scala的主要内容,如果未能解决你的问题,请参考以下文章

ScalaScala学习资料

ScalaScala技术栈

ScalaScala之Numbers

ScalaScala之String

ScalaScala的Predef对象

ScalaScala之Control Structures