scala学习日记

宋博易
2023-12-01

scala学习笔记(一)

(菜鸟的第一次博客尝试)
一:scala语言基础
*)scala简介
1)多范式编程语言
面向对象编程+面向函数式编程
2)编程简单
Java vs Scala编程语言
代码量:10:1
3)scala语言诞生了两个大数据框架,而且非常重要的大数据框架
- spark
分布式海量数据处理框架
- kafka
分布式流平台,基于消息的发布订阅队列框架,存储数据
3)学习网站
https://www.scala-lang.org
- 官网
http://twitter.github.io/scala_school/zh_cn/
- 推特
4)版本的选择
2.11.x版本, 此处为2.11.12
备注说明:
- Spark 1.6.x版本 推荐的scala 2.10.x版本
- Spark 2.x版本 推荐的Scala 2.11.x版本

*)scala的安装
	1)windows平台
		*)JDK 8
		*)以scala-2.11.12.zip为例
			1:解压缩:D:\developer\scala-2.11.12
			2:设置SCALA_HOME:D:\developer\scala-2.11.12
			3:将%SCALA_HOME%\bin加入到PATH路径
			4:执行:scala -version
	2)linux平台
		*)JDK 8
		*)跟安装JDK步骤相同
	
*)写一个scala程序
	1)scala语言是基于JVM之上的语言
		 *.java 
			编译 *.class -> JVM
		 *.scala
			编译 *.class -> JVM
	    
		#创建scala文件
	    vi HelloScala.scala
	   
	    #编写scala程序
		object HelloScala {
			def main(args: Array[String]): Unit = {
				println("Hello World !!!")
			}
		}
		#编译scala代码
		scalac HelloScala.scala
		
		#执行scala程序
		scala HelloScala
*)常用开发工具
	1)REPL(Read Evaluate Print Loop):命令行
	2)IDE:图形开发工具
	The Scala IDE (Based on Eclipse):http://scala-ide.org/ 
IntelliJ IDEA with Scala plugin:http://www.jetbrains.com/idea/download/ 
		Netbeans IDE with the Scala plugin
*)scala数据类型
	1)在scala中,任何数据都是对象
		举例:数字1 -》是一个对象,就有方法
				scala> 1.toString
				res0: String = 1
				scala> 1
				res1: Int = 1
				scala> "1".toInt
				res2: Int = 1
	2)数据类型:复习
		Byte:		8位的有符号			-128~127
		Short:		16位的有符号的		-32768~32767
		Int:		32位的有符号的		
		Long:		64位的有符号的
		Float:		浮点型
		Double:	双精度
	3)var声明变量,variable 简写,表示的变量,可以改变值
		scala> var b:Byte = 116
		b: Byte = 116
		#如果不声明变量类型,则根据变量值进行自动推导
		scala> var b = 116
		b: Int = 116
		scala> b = 120
		b: Int = 120
		scala> b = "abc"
		<console>:12: error: type mismatch;
		 found   : String("abc")
		 required: Int
			   b = "abc"
				   ^
	4)val声明变量, value 简写,表示的意思为值,不可变
		scala> val c: Int = 12
		c: Int = 12
		scala> c = 13
		<console>:12: error: reassignment to val
			   c = 13
				 ^
	5)对于字符串来说,在scala中可以进行插值操作
		scala> var str = "Hello ${name}"
		str: String = Hello ${name}
		scala> var str = s"Hello ${name}"
		str: String = Hello Tom
	6)lazy 使用
		scala> lazy val i = 10
		i: Int = <lazy>
		
		scala> i
		res3: Int = 10
		
		举例:读取文件(文件不存在的话)
			scala> val words = scala.io.Source.fromfile("d:\\aa.txt").mkString
			<console>:11: error: value fromfile is not a member of object scala.io.Source
				   val words = scala.io.Source.fromfile("d:\\aa.txt").mkString
											   ^
			scala> val words = scala.io.Source.fromFile("d:\\aa.txt").mkString
			java.io.FileNotFoundException: d:\aa.txt (No such file or directory)
			  at java.io.FileInputStream.open(Native Method)
			  at java.io.FileInputStream.<init>(FileInputStream.java:131)
			  at scala.io.Source$.fromFile(Source.scala:91)
			  at scala.io.Source$.fromFile(Source.scala:76)
			  at scala.io.Source$.fromFile(Source.scala:54)
			  ... 32 elided
			scala> lazy val words = scala.io.Source.fromFile("d:\\aa.txt").mkString
			words: String = <lazy>
	7)在scala中操作符就是方法
		scala> 1.+(2)
		res3: Int = 3
		
		在scala中不支持三种操作符
			++   /  --/		?:
			自增	自减	三目
			
		scala中的操作符实际上就是scala中方法的调用,只不过为了简洁期间,将方法的调用转换为中缀表达式
		
		Scala中操作符实际上是方法。例如:
		a + b
		是如下方法调用的简写:
		a+(b)
		a 方法 b可以写成 a.方法(b)
	8)给变量赋值
		scala> var a = _
		<console>:11: error: unbound placeholder parameter
			   var a = _
					   ^
		scala> var a:String  = _
		a: String = null
		
		scala> var b:Int = _
		b: Int = 0
		
		scala> var b:Double = _
		b: Double = 0.0
		#如果使用默认值的话,一定指明变量的类型,否则报错
			String类型的默认值是null
			Int类型的默认值是0
			Double类型的默认值是0.0
			
	9)Nothing表示在程序运行中产生了Exception
		scala> def f = throw new Exception("Someing")
		f: Nothing
		如果返回值是Nothing,表示返回了异常
		
	注意:在Scala中,定义变量可以不指定类型,因为Scala会进行类型的自动推导

*)scala的条件表达式
	IF 判断来说有三种结构:
		-1, IF
		IF(boolean) {
		
		}
		
		-2, IF...ELSE...
		IF(boolean) {
			//TODO true do something
		} 
		ELSE {
			//TODO false do something
		}
		
		-3,IF...ELSE IF...ELSE
		IF(i==1) {
			//TODO true 1 something
		} 
		ELSE IF(i==2){
			//TODO false 2 something
		}
		ELSE {
			//TODO false 0 something
		}
	
	def main(args: Array[String]): Unit = {

	}
	#Unit表示无返回值,相当于Java中的void
	
	块表达式
	在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值
*)scala的循环
	For 循环
		循环表达式
			在JAVA中进行循环的时候
			for(int i = 0; i< 10; i++)
	While 循环表达式
		while loop
			先判断再执行
		Do While loop
			先执行后判断,至少执行一次
			
	For循环:
		**倒序的关键字:reverse
		将输出结果保存为一个新的集合关键字:yield**
		scala> for(s <- str) println(s)
		a
		b
		c
		d
		scala> val list = Array("Hadoop", "Spark", "Hive")
		list: Array[String] = Array(Hadoop, Spark, Hive)
		scala> for(a <- list) println(a)
		Hadoop
		Spark
		Hive
		
		#to:左闭右闭区间
		scala> 1 to 10
		res4: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
		#Range:左闭右开区间
		scala> Range(1, 10)
		res5: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
		#Range:左闭右开区间,生成1-9之间数字,其中参数2是步长
		scala> Range(1, 10, 2)
		res7: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
		#until:左闭右开区间
		scala> 1 until 10
		res6: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
		scala> val r = 1 to 3
		r: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
		scala> for(i <- r) println(i)
		1
		2
		3
		scala> for(i <- 1 to 3) println(i)
		1
		2
		3
 类似资料: