欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

scala 语法(一)

程序员文章站 2022-03-26 10:32:01
1)基本语法 变量:val var(可变变量); 数据类型:Byte,Char,Int,Short,Long,String(字符),Float,Double,Boolean(true,flase); 列子: val a = 3; or val a:Int = 3;//不可变,不能重新赋值 var b ......

1)基本语法
变量:val var(可变变量);
数据类型:byte,char,int,short,long,string(字符),float,double,boolean(true,flase);
列子:
val a = 3; or val a:int = 3;//不可变,不能重新赋值
var b = 4.33; or var b:double = 4.33; //可变, 可赋值b = 3.9999;

字面量 :5 + 6 ; == (5).+(6) ;//scala是纯面向对象语言,+为方法。3 max 5 ; //(基本数据类型福包装类包含更多运算方法)

自增自减(不能使用a++,a--): 需使用a+=1,a-=1等等

创建range:1 to 5 ;//range(1,2,3,4,5) == 1.to(5);
1 until 5;//range(1,2,3,4)
1 to 10 by 2;//以2为间隔生成range。
0.5f to 5.9f by 0.3f;

输入输出
输入(import scala.io.stdin) readint,readdouble,......
var i = readint();//输入整型即可
输出 print,println(输出换行),printf(格式化输出)
println(a), pirntf("output is %d,input is %.2f",a,b)

读写数据
写(import java.io.printwriter)
val out = new printwrite("path/out.txt");
for( i <- 1 to 5) out.println(i)//写入文件out.txt
out.close
读取(import scala.io.source)
val readfile = source.fromfile("out.txt")
val lines = readfile.getlines//返回结果lines为迭代器
for(line<- lines) println(line)

异常处理
例子:
import java.io.filereader
import java.io.filenotfoundexception
import java.io.ioexception
try{
val f = new filereader("path/out.txt")
}
catch{
case ex: filenotfoundexception =>
print("file not found:)
case ex:ioexception =>
print("io error")
} finally{
file.close()
}
控制语句(if,while,for)
val x=3
if(x>0){ ...} else if(x=3){...} else{...}//if语句可以赋值给变量 val a = if(x=0) 1 else 0
where(x>0){ x-=1;printf(...)}
do{x+=1 println(i)}where(x<3)

for语句
for(i<- 1 to 5) println(i)
for(i<-1 to 5 if i%2==0) println(i)
fro(i<-1 to 5 if i%2!=0;j<-1 to 10 if j!=i) println(i*j)//多个生成器+守卫(if)
val r = for(i<- 1 to 5 if i%2==0) yield {println(i);i} //将for生成器生成的所有值收入集合r( vector(2,4))

2)数据结构(容器collection)import scala.collection,scala.collection.mutable(可变),scala.collection.immutable(不可变)默认

列表(list)
val strlist = list("me","you","our") //不可变列表 方法:head,tail
val otherlist = "they"::strlist
val list1 = 1::2::3::nil == list(1,2,3)

集合(set) 不重复元素
var myset = set("hadop","spark") //var可变,库为不可变库
myset+="scala" //添加元素
导入可变包
import scala.collection.mutable.set
val myset = set("a","b")//val不可变,但set可变
myset+="c"

映射(map)
val mymap = map("a"->1,"b"->2)//键值对,键是唯一的,值不唯一
索引:print(mymap("a"))
val c = if (mymap.contain("a")) mymap("a") else 0 //contain判断键是否存在
可变map (import scala.collection.mutable.map)
mymap("a") = 3 //更新
mymap("c")= 4 //添加新元素
mymap+=("d"->5,"e"->6) //add
for((key,value)<-mymap) println(key,value) or for(key<-mymap.keys) print(key) or mymap.values(生成迭代器)

迭代器(iteration)
val iter = iteration(1,2,3,4)
while(iter.hasnext) { println(iter.next) } or for(elem<-iter) { printn(iter.next)}
方法:grouped,sliding返回迭代器
val mylist = list(1,2,3,4,5)
val a = mylist grouped 3 //按照3分为两组,返回迭代器,a.next=list(1,2,3) a.next = list(4,5)
val b = mylist sliding 3 //3个数滑动 b.next = list(1,2,3) .next = (2,3,4)....

数组(array)(变长数组import scala.collection.mutable.arraybuffer
val myarray = new arrayint or val myarray = new array(2,3,4)
myarray(0) = 1 myarray(1)=2 myarray(2) = 3
for(elem<-0 to 2) { println(myarray(elem)) }
多维数组 val myarray = array.ofdimint
可变数组 val myarray = arraybuffer(10,20,30) myarray+=40 方法 insert ,remove

元组(tuple)数据类型可以不同
val mytuple = tuple("a",1,3) println(mytuple._1) println(mytuple._2) //索引