首先很高兴能成为王老师3000门徒之一,在新年第一天第一课《Scala光速入门》就长达三个小时,在这三个小时的时间里面,整体上感觉难度不是很大,但由于前期没有准备Scala环境,仅仅听导致效率很低,导致中间大半个小时基本上收获比较低,今天上午我把Scala环境搭建完毕,也把spark源码下载下来,后面紧跟着王老师的脚步,提高上课效率,课后及时复习;
第一课主要讲的内容总结如下:
1,scale基于JVM,scale可以调用java所有方法和接口
2,scale是完全面向对象(一切皆对象,一切对象都有方法),
3,scale实现代码量是java的五分之一或者十分之一;
4,王老师推荐使用Scale 2.10.4版本;
5,Val 至关重要,不希望数据改变,就是用val,初步达到目标
scala> val rsult = 2+10
rsult: Int = 12
scala> rsult = 13
:12: error: reassignment to val
rsult = 13
^
6,Scala支持的基本数据类型,如果你是个Java程序员,你会发现Java支持的基本数据类型,Scala都有对应的支持,不过Scala的数据类型都是对象(比如整数),这些基本类型都可以通过隐式自动转换的形式支持比Java基本数据类型更多的方法
scala> 1+2
res13: Int = 3
scala> 1.5+2
res14: Double = 3.5
scala> res14.is
isInfinite isNaN isValidByte isValidShort
isInfinity isNegInfinity isValidChar isWhole
isInstanceOf isPosInfinity isValidInt
8,_用法
scala> min(20,4)
scala> import scala.math._
import scala.math._
scala> min(20,4)
res16: Int = 4
scala> Array(1,2,3,4)
res17: Array[Int] = Array(1, 2, 3, 4)
scala> val array = Array(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)
scala> array
res18: Array[Int] = Array(1, 2, 3, 4)
scala> Array(1,2,3,4)
res17: Array[Int] = Array(1, 2, 3, 4)
scala> val array = Array(1,2,3,4)
array: Array[Int] = Array(1, 2, 3, 4)
scala> array
res18: Array[Int] = Array(1, 2, 3, 4)
scala> res18.apply(0)
res19: Int = 1
scala> res18.apply(0,1,2)
:17: error: too many arguments for method apply: (i: Int)Int in cla
rray
res18.apply(0,1,2)
^
scala> var array = Array.apply(0,1,2)
array: Array[Int] = Array(0, 1, 2)
scala> val arr = new Array[Int](5)
arr: Array[Int] = Array(0, 0, 0, 0, 0)
scala> arr(3)
res21: Int = 0
scala> arr(2)=8
scala> arr
res23: Array[Int] = Array(0, 0, 8, 0, 0)
scala> arr.apply(2)
res24: Int = 8
scala> val arrBuffer = ArrayBuffer[int]()
:14: error: not found: value ArrayBuffer
val arrBuffer = ArrayBuffer[int]()
^
:14: error: not found: type int
val arrBuffer = ArrayBuffer[int]()
^
scala> import scala.collection.mutable.Array
ArrayBuffer ArrayLike ArraySeq
ArrayBuilder ArrayOps ArrayStack
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer
scala> val arrBuffer = ArrayBuffer[Int]()
arrBuffer: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> arrBuffer +=(11,1,3,4,5)
res25: arrBuffer.type = ArrayBuffer(11, 1, 3, 4, 5)
scala> arrBuffer
res26: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(11, 1, 3, 4, 5)
scala> arrBuffer.trim
trimEnd trimStart
scala> arrBuffer.trimEnd(3)
scala> arrBuffer
res28: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(11, 1)
11,移除一个数组中第一个负数以后的负数
val array = ArrayBuffer[Int]()
array +=(8,3,4,5,-15,8,-2,-100)
var firstNegative = false
var length = array.length
var indexed = 0
while(indexed < length)
{
if (array(indexed) >=0) {
indexed +=1
} else{
if (!firstNegative)
{
firstNegative = true;
indexed +=1
} else {
array.remove(indexed);
length -=1
}
}
println(array)
}
ArrayBuffer(8, 3, 4, 5, -15, 8, -2, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8, -2, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8, -2, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8, -2, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8, -2, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8, -2, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8, -100)
ArrayBuffer(8, 3, 4, 5, -15, 8)
12,
val n =10
def f1:Any = {
for(i<-1 to 10)
{
if(i == n)
return i
println(i)
}
}
f1
结果:
1
2
3
4
5
6
7
8
9
val:类似java中final类型的变量
scala> val age :Int=0
age: Int = 0
scala> var msg name:String = null
:1: error: illegal start of simple pattern
var msg name:String = null
^
scala> var name:String = null
name: String = null
scala> val age1,age2,age3 =0
age1: Int = 0
age2: Int = 0
age3: Int = 0
函数格式:
def 函数名(参数列表,...):返回结果类型={},下面给出一个max函数
1,有时函数必须制定返回结果类型,如函数时递归,就必须明确制定返回结果类型
2,在max这里例子中及时不写返回结果,编译器也能推断,如实这个函数就 编程如下的样子,作用功能都没有变化
3,如果函数仅 一个语句,连花括号都可以不写。如是max函数就成了这样,作用功能仍然没有变化
greeting():Unit,其中Unit值得时greetin的返回类型,类似于Java的void类型,而且Java中的void类型会被映射成Unit
def greeting()=println{"no args no return?"}
greeting()
greeting
结果两个都返回
no args no return?
no args no return?
Scala中,i++或者++i都不能其作用,只能使用i=i+1
var i = 0
while(i <= 5)
{
println("i is :" + i)
i++ //value ++ is not a member of Int
}
}
args.foreach(arg => println(arg))
args.foreach((arg: String) => println(arg))
args.foreach(println)