01-3000门徒-第一课-大数据最火爆语言Scala光速入门-笔记

01-3000门徒-第一课-大数据最火爆语言Scala光速入门-笔记
01-3000门徒-第一课-大数据最火爆语言Scala光速入门-笔记

一、scala介绍

Scala完全面向对象

相对于Java而言,Scala的代码更为精简(减低犯错),而且功能更为广泛(Scala 其实是Scalable Language 的简称,意为可扩展的语言),许多Scala的特性和语法都是针对Java的不足和弱点来设计的。Scala的特点是有很多函数程式语言的特性(例如ML,Miranda, Scheme,Haskell),譬如惰性求值,list comprehension, type inference, anonymous function, pattern matching 等等,同时也包含 Object-Oriented 的特性(OO 能与 FP 混合使用是 Scala 的亮点)。此外,许多相似于高级编程语言的语法也渗入其中(例如 Python),不仅提高了 Scala 代码的可读性,维护、修改起来也较为省时省力。

Scala 与 Java 语法上的明显差异有:

●不需要分号结尾

●类型定义开头需大写(与 Haskell 相同)

●函数定义需def 开头(与 Python、Ruby 相同)

●return 可以省略

二、scala安装

解压设置PATH即可,前提是需要先安装JDK,不在过多描述。

三、scala快速入门

toString

//变量引用转换

scala> res3.toInt

res4: Int = 9

//val 不可变类型

scala> val result = 2 + 10

result: Int = 12

//var 可变类型

scala> var name = "spark"

name: String = spark

scala> name="SCALA"

name: String = SCALA

//指定具体变量类型

scala> val age:Int = 13

age: Int = 13

//以后只能给name赋值string类型

scala> var name :String = null

name: String = null

//声明多个变量

scala> val age1,age2,age3 = 0

age1: Int = 0

age2: Int = 0

age3: Int = 0

//一切皆对象数字0也是一个对象能调用方法

scala> 0.to(5)

res5: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5)

//1+1调用的也是方法+

scala> 1+1

res6: Int = 2

scala> 1.+(1)

warning: there were 1 deprecation warning(s); re-run with -deprecation for details res7: Double = 2.0

//scala 没有++ --

//调用函数

scala> import scala.math._

import scala.math._

scala> min(2,4)

res8: Int = 2

//实例构造调用的是apply方法

scala> val arr = Array(1,2,3)

arr: Array[Int] = Array(1, 2, 3)

scala> val arr=Array.apply(1,2,3)

arr: Array[Int] = Array(1, 2, 3)

//if表达式可以有返回值

scala> val age = 19

age: Int = 19

scala> if(age>18)"adult" else "child"

res9: String = adult

//块表达式最后一行是块的返回值

//打印

scala> println("spark")

spark

scala> print("\nspark")

spark

scala> printf("%s is the future \n","spark")

spark is the future

四、scala函数简单入门

1.函数声明

2.函数定义:

返回类型可以是任何有效的scala数据类型。它不返回任何东西,可以返回这相当于在Java中void,并表示该函数不返回任何单元。Scala中不返回任何东西函数被称为过程。

3.调用函数

4.命名参数

5.可变参数

6.默认参数值

五、scala数组

数组是定义数据类型很重要很基础的容器

1.不可变数组

以用new去实例化。括号3表示数组容量是3

数组元素赋值

greetStrings(0) = "Hello"

虽然greetStrings是不可更改的,但数字元素可以。

Scala用小括号代替java的中括号,可能很多java工程师会说:呵,发明新轮子。其实Scala是被冤枉的。

Scala里所以东西都是对象,数组也不例外。数组赋值其实也是一个方法完成的。

上面的代码会被编译器转换成两个参数的方法:

greetStrings.update(0, "Hello")

数组元素读取

print(greetStrings(i))

为什么Scala不用中括号呢?是因为Scala有一套通用规则,会把小括号转换成apply。所以编译器会得到这样的代码:

print(greetStrings.apply(i))

2.可变数组ArrayBuffer

val ab = scala.collection.mutable.ArrayBuffer[Int]();

// 尾部添加一个元素

ab +=1

//尾部添加整个数组的元素

ab += 1ab ++=Array(2,3,4,5,6)

//下标为2的位置添加元素100

ab.insert(2,100)

//裁剪[删除]开始两个元素

ab.trimStart(2)

//删除结尾两个元素

ab.trimEnd(2)

//删除下标为5的元素

ab.remove(3)

//从下标为3的位置开始删除,总共删除2两个元素

ab.remove(3,3)

//转换为不可变数组

ab.toArray

//遍历 ,1表示打印间隔为1个元素,就是所有元素都打印

for( i <- 0 until (ab.length,1))println(ab(i))

//遍历 ,2表示打印间隔为2个元素,每隔一个元素打印

for( i <- 0 until (ab.length,2))println(ab(i))

//尾部进行遍历

for(i <- (0 until ab.length).reverse) println(ab(i))

//快速排序

六、Map基本操作

七、tuple基本操作

tuple。与列表一样,元组也是不可变的,但与列表不同,元组可以包含不同类型的元

八、lazy关键字

lazy表示延迟执行,只有真正使用的时候才会执行。scala 中只有val 才允许lazy。所以不能用泛型.

九、循环

while

Scala也有do-while循环

for进行迭代

for做的最简单的事情就是把一个集合类的所有元素都枚举一遍

表达式必须支持名为foreach的方法

1.for (i < - 1 to 4)

2. println("Iteration " + i)

不想包括被枚举的Range的上边界,可以用until替代to:

过滤

有些时候你不想枚举一个集合类的全部元素。而是想过滤出一个子集。你可以通过把过滤器:filter:一个if子句加到for的括号里做到。如代码7.6的代码仅对当前目录中以

如果在发生器中加入超过一个过滤器,if子句必须用分号分隔。这是代码中的“if file.isFile”过滤器之后带着分号的原因。

mid-stream(流间)变量绑定

制造新集合

只要在for表达式之前加上关键字yield

for表达式在每次执行的时候都会制造一个值,本例中是file。当for表达式完成的时候,结果将是一个包含了所有产生的值的集合。结果集合的类型基于枚举子句处理的集合类

十、作业

相关主题
相关文档
最新文档