scala基础
Scala的简介
大数据中使用Scala编写的两大框架就是kafka和Spark
1. 官方网站:
2.特点
1.即是面向对象编程又是编写函数编程(函数可以独立于对象独自存在,不必非要在对象中)
2.和Java一样是运行在JVM之上的高级语言(.scala文件进行编译===》.class文件===》运行在JVM上)
3.scala版本不兼容性(各个版本之间是不兼容的:2.11.x 2.10.x 2.9.x 各个版本之间不兼容)
4.交互式命令行:可以像Python那样在Linux中一命令行的形式执行命令
3.Scala的下载地址
https://www.scala-lang.org/download/all.html
4 IDEA 下载
https://www.jetbrains.com/idea
scala变量,基本类型
1.变量的声明
1.Scala中的变量必须要用var或者val进行声明
val修饰的变量的值不可变(官方推荐使用val进行声明)
var修饰的变量的值可变
使用var和val声明变量的时候可以省略变量的数据类型(Scala可以根据变量的值自动判断变量的数据类型)
2.Scala中没有return这个关键字:
Scala中表达式(方法或者函数)的最后一行值就是表达式的返回值,没有返回值的时候,表达式的数据类型是Unit
注意:如果表达式的返回值类型是Unit,则表示表达式没有返回值,最后一行值也不返回
注意:Scala中没有++,--,?: 三种操作符
3.Lazy:使用Lazy修饰的变量会具有惰性,只有在第一次使用的才会别初始化
2.Scala中的数据类型
Byte,Short,Int,Long,Float,Double,Boolean,Char,String
Scala的控制流程结构
1.产生区间的三个函数
Range:左闭又开区间(可以设置步长)[)
Until:左闭右开区间 [)
to:左右都闭区间 []
2.for循环
从迭代器中获取数据作为循环判断条件
1 object ForDemo { 2 def main(args: Array[String]): Unit = { 3 val arr = 1 to 10 4 // SCALA中使用FOR循环进行遍历 5 for(item <- arr){ 6 println(s"$item") 7 } 8 // 当循环体内仅有一行语句的时候,可以省略花括号 9 for(item <- arr) println(s"$item") 10 println("\n===========================================") 11 // 在FOR循环中,加上IF条件守卫判断 12 for(item <- arr if item % 2 == 0) println(s"$item") 13 println("\n===========================================") 14 // TODO: 打印 九九乘法表 15 // 外层循环 16 for(i <- 1 to 9){ 17 // 内层循环 18 for(j <- 1 to i){ 19 print(s"$i * $j = ${i * j} ") 20 } 21 println() 22 } 23 println("\n===========================================") 24 // TODO: 在Scala中不建议使用多层嵌套循环格式 25 for(i <- 1 to 9; j <- 1 to i){ 26 if(j == 1) println() 27 print(s"$i * $j = ${i * j} ") 28 } 29 println("\n===========================================") 30 for{ 31 i <- 1 to 9 // 外层循环 32 j <- 1 to i // 内层循环 33 }{ 34 if(j == 1) println() 35 print(s"$i * $j = ${i * j} ") 36 } 37 println("\n===========================================") 38 val names = Array(" www.baidu.com", "www.google.com ", " www.erongda.com ") 39 for{ 40 name <- names 41 tmpName = name.trim 42 if tmpName.length > 0 43 }{ 44 // 将循环体中代码,放入到 循环条件代码块中编写 45 println(tmpName) 46 } 47 println("\n===========================================") 48 // Python语言中,列表推导式 49 // TODO: 基于已有的集合,产生一个新的集合 50 val result: IndexedSeq[Double] = for(item <- arr if item % 2 == 0) yield { 51 Math.pow(item, 2) 52 } 53 println(result) 54 } 55 }
3.while循环
循环判断条件的Boolean值作为循环的终止条件
While 循环的使用场景:
死循环(模拟产生数据,某个任务一直运行)
从迭代器中获取数据
/** * 在Scala中初步使用While循环结构语句 */ object WhileDemo { def main(args: Array[String]): Unit = { // 定义一个数组 val arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7) // 遍历数组,定义一个数组索引的下标 var index: Int = 0 // TODO: 数组下标从0开始, arr(index) while(index < arr.length){ // println("index = " + index + ", value = " + arr(index)) println(s"index = $index, value = ${arr(index)}") // 索引加1 index += 1 } } }
4. break退出循环
/** * 在Scala中如何使用Breaks类实例对象跳出FOR循环 */ object BreakDemo { def main(args: Array[String]): Unit = { // 定义一个列表List val numList: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9) // 1. 创建Breaks实例对象 val loop = new Breaks() // 2. 要对遍历的循环进行控制 loop.breakable{ for(item <- numList){ println(s"value of is $item") // TODO: 当item == 5 的时候,终止遍历集合,跳出循环 if(item == 5){ // 3. 跳出循环 loop.break() } } } } }