Scala学习笔记:Scala语法基础
程序员文章站
2024-02-18 12:44:10
...
注意:因为使用的spark版本是2.2.0,而spark2.2.0是用scala2.11.8编译的,为避免版本问题,最好下载scala 2.11.8
下载安装就不说了,有安装包,不需要设置环境变量,直接输入scala进入shell,输入:quit退出shell。
同Python,scalashell即解释器,scala还能自动判断类型,scala中所有类型都是class。
一些简单示例:
scala中var表变量,val表常量:
指定变量类型
易错: scala中变量类型均已大写字母开头
scala中运算符实际上是方法,只不过是被重载成了运算符。这种使用方式不常用:
支持大数运算:
导入库
(下划线为通配符):
字符串去重:
在命令行模式下粘贴代码,输入:paste进入粘贴模式:
for循环与跳出
to
until
break
scala中跳出循环需要借助库函数:
import scala.util.control.Breaks._
breakable{
var n=10
for(c<-"hello world"){
print(c)
n-=1
if(n==4) break;
}
}
嵌套循环
下面程序中,j先递增:
for(i<-(1 to 9);j<-(1 to 9)){
if(j==9){
println(i+"*"+j+"="+i*j)
}
else{
print(i+"*"+j+"="+i*j+"\t")
}
}
函数(块语句)
返回值与返回值类型
注意:有返回值的函数名后面必须带等号。函数名与函数体之间无等号连接的函数叫做过程,返回类型为unit。
scala中函数的最后一行即为返回值:
def fun1(n:Int):Int={
var sum=0
for(i<-(1 to n)){
sum+=i
}
sum
}
fun1(10)
递归
递归函数必须指定返回类型:
def feb(n:Int):Int={
if(n<=2)
1
else
feb1(n-1)+feb1(n-2)
}
设置参数默认值
def sayhello(name:String="nobody"){
print("hello "+name)
}
变长参数
def sum(num:Int*):Int={
var result=0
for(i<-num){
result+=i
}
result
}
序列参数
def sum(nums:Int*):Int={
if(nums.length==0) 0
else nums.head+sum(nums.tail:_*)
}
.head方法为取序列的首元素,.tail方法为取除首元素后的序列。“_*”说明参数为序列类型。
异常处理:
非法参数异常
try {
throw new IllegalArgumentException("x should not be negative")
} catch{
case _:IllegalArgumentException => println("Illegal Argument")
} finally{
println("release resources.")
}
IO异常
import java.io._
try{
throw new IOException("user defined Exception")
} catch{
case e1:IllegalArgumentException => println("Illegal Argument")
case e2:IOException => println("IO exception")
}
数组:
定长数组Array
指定类型的定长数组Array
var array=new Array[Int](10)
array(0)=1
array
不指定类型的定长数组Array
很好奇为什么不用new?
var arrry=Array(0,1,"a","b")
变长数组ArrayBuffer
变长数组需要导入库: import scala.collection.mutable.ArrayBuffer
往变长数组中添加元素
var arrbuf=new ArrayBuffer[Int]()
arrbuf+=(1,2,3,4,5)
往变长数组中添加集合
arrbuf++=array
删除:
****上还讲了很多,不写了,这种语言需要用的时候再学就行了。