spark学习进度3:Scala中变量,常量,数据类型,运算符,表达式,循环,方法,函数的基本使用

scala中定义变量:
(1)var 变量名 = 初始化值
(2)var 变量名:数据类型 = 初始化值
如:var a = 1
注意:
(1)定义变量的时候需要初始化
(2)定义变量的时候可以不指定变量的数据类型,这时系统会根据变量的初始化值推断变量的数据类型

定义常量:
(1)val 常量名 = 初始化值
(2)val 常量名:数据类型 = 初始化值
注意:
(1)val修饰的常量,相当于java中final修饰的变量
(2)val修饰的常量,常量的类型的值类型(相当于Java的基本数据类型,int,double,boolean),值是不可以修改的(如:val a = 10,a的值是无法修改的)

val修饰的变量,变量的类型是引用类型,引用不可变,引用的内容可变
如:
val a1 = Array(1,2,3)
val a2 = Array(4,5,6)
a1 = a2 //错误,引用不可变
a1(0) = 10 //正确,引用的内容可变

lazy修饰val的常量(lazy只能修饰val定义的常量),当使用到这个常量的时候才会执行赋值操作。

在程序开发中,能使用val的地方尽量使用val。


Scala中的数据类型:
(1)分为值类型(java中的基本数据类型)和引用类型
(2)值类型是类类型,没有基本数据类型和包装类之分


运算符:
(1)Scala中的运算符都是方法的重载,是方法的调用(如:1 + 1和1.+(1)代表相同的意思)
(2)Scala中没有++与--运算符,可以用+=和-=代替

表达式:
表达式就是一个语句块,包含一条或者多条语句
特点:
(1)表达式是有返回值的
(2)返回值是表达式中最后一条语句的执行结果
条件表达式:
定义:含有if/else的语句块
val a = 1
val res = if(a>0)100 else -100//返回100
val res = if(a>0) 100 else if(a<0) -100 else 0//返回100
块表达式:
定义:{一条或者多条语句}//返回值为最后一条语句的执行结果
val res = {10}//返回10
val res = {val a = 10|val b = 10|a+b}//返回20
val res = {val a = 10|val b = 10}//返回(),()是unit类型


循环:
for:
for(i <- 1 to 10)println(i)//输出结果为1到10,其中1 to 10是一个集合
for(i <- 1 until 10)println(i)//输出结果为1到9,其中1 until 10是一个集合
for(i <- 1 to 3;j <- 1 to 3 if(i!=j))print(10*i + j)//嵌套循环+条件
val res = for(a <- 1 to 10)yield a*10//yeild产生返回值,res是一个集合
while:
while(条件语句){表达式}
do while:
do{表达式}while(条件语句)


方法:
定义方法:def 方法名(参数列表):返回类型 = 方法体//其中对于递归方法返回类型是不可以省略的,对于其他方法可以省略;方法体是一个表达式。
定义实例:
def add(x:Int,y:Int) = x+y
def add(x:Int,y:Int):Unit = {x+y|println(x+y)}
调用实例:
add(x=1,y=2)或者add(1,2)

带有参数列表的方法:
def addAndMultiply(x:Int,y:Int,z:Int) = (x+y)*z
def addAndMultiply(x:Int)(y:Int,z:Int) = (x+y)*z
def addAndMultiply(x:Int)(y:Int)(z:Int) = (x+y)*z
调用的形式分别为:
addAndMultiply(1,2,3)
addAndMultiply(1)(2,3)
addAndMultiply(1)(2)(3)

没有参数的方法:
def printInfo = println("i love scala")
调用:
printInfo//不可以带小括号
def printInfo() = println("i love scala")
调用:
printInfo()
printInfo//带不带小括号都可

带有默认参数值的方法:
def printInfo(str:String = "Hello Scala") = println(str)
调用:
printlnInfo()//输出Hello Scala
printlnInfo(i love scala)//输出i love scala
注意:
def add(a:Int = 1,b:Int,c:Int = 3) = println(a+b+c)
调用时add(1)报错,因为默认把1给了a,b没有默认值,add(1,2)或者add(b = 2)是可以的

可变长参数方法:
def add(a:Int*) = {for(i <- a)|println(a)}


函数:
函数定义(1):val fun = ((x:Int,y:Int)=>x+y)//最常用
函数定义(2):val fun = (_:Int)+(_:Int)
函数定义(3):val fun :(Int,Int)=>Int = (_+_)
函数定义(4):val fun :(Int,Int)=>Int =(x,y)=>x+y
无参函数定义:val fun = () =>println("haha")
无参数函数调用:fun()//必须带小括号

原文地址:https://www.cnblogs.com/123456www/p/12257082.html