1、Scala高级语言
Scala简介
Scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的最佳特性。具体来讲 |
Scala运行于Java虚拟机(JVM)之上,井且兼容现有的Java程序,同样具有跨平台、可移植性好、方便的垃圾回收等特性 |
Scala是一门纯粹的面向对象的语言 |
Scala也是一门函数式语言 |
Scala也是一门更适合大数据的语言 |
Scala对集合类型数据处理有非常好的支持 |
Spark的底层用Scala编写 |
编程范式
编程范式是指计算机编程的基本风格或典范模式。常见的编程范式主要包括命令式编程和西数式编程。面向对象编程就属于命令式编程,比如C++、Java等 |
命令式语言是植根于冯•诺依曼体系的,一个命令式程序就是一个冯•诺依曼机的指令序列,给机器提供一条又一条的命令序列让其原封不动地执行 |
函数式编程,又称泛函编程,它将计算机的计算视为数学上的函数计算 |
函数编程语言最重要的基础是入演算,入演算对函数式编程特别是Lisp语言有着巨大的影响。典型的函数式语言包括Haskell、 Erlang和Lisp等 |
函数式编程与命令式编程 |
命令式编程涉及多线程之间的状态共享,需要锁机制实现并发控制 |
函数式编程不会在多个线程之间共享状态,不需要用锁机制,可以更好并行处理,充分利用多核CPU井行处理能力 |
1.1 Scala简介
Scala是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala运行在Java虚拟机上,并兼容现有的Java程序。 Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。 函数编程范式更适合用于Map/Reduce和大数据模型,着眼于函数本身,函数范式逻辑清晰、简单,非常适合用于处理基于不变数据的批量处理工作。 像Spark,kafka等都是采用Scala开发的,所以学习好大数据,掌握scala是必要的。Flink是带有scala的api支持。 官网:The Scala Programming Language
安装方法:scala部署使用方法
1.5 Scala 编码规范
1.5.1 文件名和编码
# | 源文件名必须和它包含的顶层类名保持一致,包括大小写,并以.scala作为后缀名。 |
# | 源文件编码必须是 UTF-8 |
1.5.2 特殊字符
空格
除了换行符之外,ASCII空格(0x20)是唯一合法的空格字符。这意味着
-
所有在源代码中(包括字符、字符串以及注释中)出现的其他空格字符需要转义,例如
Tab
用\t
表示。 -
缩进必须使用 4个空格 而不是
Tab
特殊转义字符
对于有特殊转义表示的字符 \b, \t, \n, \f, \r, \", \', \\
,禁止使用其它等价转义方式。例如\012
或者\u00a
表示。
1.5.3 代码书写规范
列宽:每行不超过150个字符
缩进:4个空格,严禁使用Tab
括号的使用:
-
左花括号({)前不能换行,在其后换行。
-
在右花括号(})前要有换行。
-
如果右花括号是一句语句、一个方法、构造函数或非匿名类的结尾,其后需要换行。
new MyClass() { // 左花括号前不能换行,在其后换行@Overridedef method():Unit= {if (condition()) {try {do {something()} while (!stop()) // do-while中间的右花括号后} catch { // try-catch中间的右花括号后无需换行case e:Exception =>recover()} // try-catch结束,右花括号后需要换行} else { // if-else中间的右花括号后无需换行doSomethingElese()} // if-else结束,右花括号后需要换行}
其他:scala中的简单表达式可以省略括号
// 推荐
def square(x: Int) = x * x
val y = if (x < 0) -x else x
if(cond1){// one line statement
}else{// one line statement
}
// 避免
if (x < 0) -x
elsex
空行的使用
在以下情况下增加空行:
-
在类的不同的成员间增加空行,包括:成员变量、构造函数、方法、内部类、静态初始化块、实例初始化块等两个成员变量声明之间可以不加空行。空行通常用于对成员变量进行逻辑分组
-
方法体内,按需增加空行,以便从逻辑上对语句进行分组
-
禁止使用连续的空行
1.5.4 注释风格
使用java风格的注释,不用使用scala风格
/** 单行注释 */
// 单行注释
/*** java风格的多行注释* 推荐使用*/
/** scala风格的注释* 不推荐使用*/
1.5.5 命名规范
基本原则:驼峰命名,命名有业务含义。
val orderName = "name"