什么是 Scala (运算、集合、函数、循环)
目录
- 什么是 Scala
- 简介
- 概念
- 官网
- 六大特征
- Scala 应用场景
- 标识符(驼峰命名法)
- 数据类型
- 运算
- 常量与变量
- 运算符表达式
- 集合
- 列表
- 数组
- 定义函数
- Scala常用数据类型
- 声明函数
- 函数
- 函数组合器
- 循环判断
- (1)判断
- (2)循环
什么是 Scala
简介
- 目前主要以学习 Scala 语言 作为 学习 Spark 框架的语言基础
概念
scala 是一门以 jvm 为运行环境的静态类型编程语言,具备面向对象及函数式编程的特性
官网
- Scala 官网首页
- 对应 Spark 版本文档
六大特征
- 1、Java 和 scala 可以
混编
- 2、类型推测(
自动推测类型
) - 3、
并发
和分布式
( Actor) - 4、特质,特征(类似 java 中 interfaces 和 abstract 结合)
- 5、
模式匹配
(类似 java 中的 switch…case ) - 6、
高阶函数
Scala 应用场景
- Kafka:
分布式消息队列
,内部代码经常用来处理并发问题,用scala 可以大大简化其代码 - spark:方便处理多线程场景,另外 spark 主要用作内存计算,经常要用来实现复杂的算法。利用Scala 这种 函数式编程语言 可以大大简化代码
标识符(驼峰命名法)
- 区分大小写
- Scala 是
大小写敏感
的
- Scala 是
- 类名
- 对于所有的类名的
首字母大写
- 如果需要使用几个单词来构成一个类的名词,每个单词的首字母大写
- 对于所有的类名的
- 方法名
- 所有的方法名称的
首字母小写
- 如果若干单词被用于构成方法的名称,则每个单词的首字母大写
- 所有的方法名称的
- 程序文件名
- 程序文件的名称应该与对象名称(Scala 是区分大小写的),并追加".scala"为文件扩展名
数据类型
注意:
- 比较特殊的 None ,是 Option 的两个子类之一,另一个是 Some ,用于安全的函数返回值。
- scala 推荐在可能返回空的方法使用 Option[X] 作为返回类型。
- 如果
有值
就返回Some[X]
,无值
则返回None
。
运算
常量与变量
- 定义常量(
val
):val name:type = initialization - 定义变量(
var
):var name:type = initialization
运算符表达式
-
算术运算符:±*/%
-
关系运算符:- >,<,>=,<=,==,!=
-
逻辑运算符: &&与,||或 ,!非
-
赋值运算符: = , + = , - = …等
-
位运算符:&与,|或,^ 取反
集合
列表
-
类型
- (1)List 列表,相同元素类型
- (2) Set 没有重复的集合
- (3) Map 可迭代键值对集合
- (4) Tuple元组,可包含不同类型的元素,圆括号
数组
-
声明数组格式:var z:Array[String] = new Array[String] (num) 或 var z = Array(元素1,元素2,…)
-
数组基本操作方法
-
增:++ 或 concat
-
长度 : arr.length 返回数组的长度
-
是否为空:arr.isEmpty 判断数组是否为空
-
定义函数
Scala常用数据类型
- Int 整型(byte,short,long)
- Float 浮点数
- Double 双精度浮点数
- String 字符序列(char)
- Boolean 逻辑型(True或False)
- Unit 表示无值,与void等同(null,nothing,any)
声明函数
- def functionName (参数列表) : [return type] = { }
def add(a:Int,b:String):Int = { print(a+b)}
函数
-
匿名函数
- 定义函数不给出函数名,用“=>”表示
var addInt = (a:Int,b:Int) => a+b ; // 格式:参数列表 => 函数体
-
高阶函数
- 将函数作为
参数
- 将函数作为
返回值
- 将函数作为
-
常用函数
- range函数
range(1,10,2) // 前闭后开,步长为2
- 读取文件
Source.fromFile( 文件路径 )
- 写入文件
new PrintWriter( 文件路径 ).write( ' ****** ' ).close
函数组合器
注意: 对RDD的操作,即返回一个新的RDD
-
map 重新计算
List (1,2,3).map( x => x*2 ) : List
-
foreach 对参数进行作用
List ( 1,2,3 ).foreach( x => print( x*2 ) : Unit // 在原来原来元素上操作
-
filter 过滤
List ( 1,2,3 ).filter ( x => x%2==0 ) : List
-
flatten 降维打击
List(List ( 1,2,3 ),List(1,2,3),List ( 1,2,3 )).flatten : List
-
flatMap 结合,先map后flatten
List(List ( 1,2,3 ),List(1,2,3),List ( 1,2,3 )).flatMap(x => x *2 ) : List
-
groupBy 分组,结果Map
List ( 1,2,3 ).groupBy( x => x%2 == 0 ) : Map
循环判断
(1)判断
-
if 、if…else 、if…else if… else语句、if…else嵌套
-
match 模式匹配
x match { case 1 => fun1 ; case 2 => fun2 ; case _* => fun3} // 类似于switch
(2)循环
- while 、do …while 和 for 循环
- for循环
for ( 变量 <- 集合 ){ 循环语句 } for ( i <- 1 to 10 ){ print(i) } // to 前闭后闭 for (i <- 1 until 10 ){ print(i) } // until 前闭后开 for (i <- 1 to 10 ; if (i%2==0; if i >6){ print(i) } // 多个判断条件间用”;“
哈哈没了,到底了,Scala 语言还要很多有意思的功能,有兴趣的可以去搜一下其他博主的文章哟,他们总结的都很棒
并州刺史: 是的,重启是告诉外行人的思路,你是编程的
ToString_1024: 为啥要删除,是处理思路不对吗?
m0_70095285: 左上角 查看→显示隐藏设备
拾六_: 感谢!!解决了
并州刺史: 把这篇博客删了吧