Scala基础简介及代码示例
一、主要内容
Scala中变量的声明与函数定义
Scala中的控制结构
Scala中的数据类型
1:变量声明与函数定义
变量声明:val和var,两者的区别是val声明的变量是不可变的,而var声明的变量可变
带返回值
scala>defmax(x:Int,y:Int):Int={ |if(x>y)x |elsey |} max:(x:Int,y:Int)Int scala>max(1,2) res5:Int=2
不带返回值
scala>defhelloworld()=println("HelloWorld") helloworld:()Unit
2:控制结构
1)判断(if)
类似于上边函数定义中的max函数
2)循环(while/do)
while语句包括状态判断和循环体,只要当前状态判断为真,就执行循环体一遍,然后进行下一状态判断,判断为假时终止判断,形如while(A)B
do语句和while相反,先执行循环体一遍,然后进行状态判断,状态判断为真,则继续执行循环体,否则终止循环,形如doBwhile(A)
scala>varm=3 m:Int=3 scala>while(m!=0){ |println(m) |m-=1 |} 3 2 1 scala>varn=3 n:Int=3 scala>do{ |println(n) |n-=1 |}while(n!=0) 3 2 1
3)枚举(for)
for的两种实现
scala>for(i<-1to3) |println(i) 1 2 3 scala>for(i<-1until3) |println(i) 1 2
4)匹配(match表达式)
scala中的match类似于其他语言中的switch,从上往下进行匹配
scala>vala="gyt" a:String=gyt scala>amatch{ |case"gyt"=>println("OK") |case"cyan"=>println("no") |} OK
5)异常处理(throw/try)
Scala通过throw抛出一个异常,其异常捕获和处理与java十分类似
scala>if(true){ |println("thrownewexception") |thrownewIllegalArgumentException |} thrownewexception java.lang.IllegalArgumentException ...35elided
scala>try{ |valfile=newFileReader("input.txt") |}catch{ |caseex:FileNotFoundException=>//handlemissingfile |caseex:IOException=>//handleotherI/Oerror |}finally{ |println("end") |} end
6)输出(print/println)
一个不换行输出,一个换行输出
7)输入(readline)
输入通常使用read函数,readline是从控制台输如一行,指定类型为readT,T为类型,例如
readscala>valname=readLine(“YourName:\n”) warning:therewasonedeprecationwarning;re-runwith-deprecationfordetails YourName: name:String=thinkgamer
8)其他语句
return语言表示返回某个值,但是Scala事实上无需使用return语句,对于函数来说,其默认返回值是最后出现的一个值,不用特别注明,如需要返回的值,并非最后出现时,可在函数体后加上该值的标识符使之出现,声明函数时使用return语句,必须声明返回值类型,例如defmax:T={return}
break/continue在C++中非常常见的控制结构语句,但在Scala中是不必要的,可以使用布尔值类型的两通过if语句进行控制
3:数据结构
1)数组
使用new来实例化一个类,当你创建一个对象的实例时,你可以使用数值或者类型参数
scala>valabc=newArray[String](3) abc:Array[String]=Array(null,null,null) scala>abc(0)="thinkgamer" scala>abc(1)="cyan" scala>abc(2)="GQ" scala>for(i<-0to2) |println(abc(i)) thinkgamer cyan GQ
这里也说明下为什么Scala使用()来访问数组元素,在Scala中,数组和其他普遍的类的定义一样,没有什么特别之处,当你某个值后面使用()时,Scala将其翻译成对应对象的apply方法,因此本例中abc(0)其实调用abc.apply(0)方法,这种表达方法不仅仅只限于数据,对于任何对象,如果在其后面使用(),都将调用该对象的apply方法,同一,日过对某个使用()的对象复制,比如
abc(0)=”thinkgamer”
scala将这种复制转换为该对象的update方法,也就是abc.update(0,”thinkgamer”),因此上边的例子也可以使用传统的方法调用,可以写成:
scala>valnew_abc=newArray[String](3) new_abc:Array[String]=Array(null,null,null) scala>new_abc.update(0,"aaa") scala>new_abc.update(1,"bbb") scala>new_abc.update(2,"ccc") scala>for(i<-0to2) |println(new_abc(i)) aaa bbb ccc
从这点来收,数组在scala中并不是某种特殊的数据类型,和普通的类并没有什么区别
不过scala还是提供了初始化数组的简单的方法,上述的例子可以这样写:
scala>valabc=Array("thinkgamer","cyan","GQ") abc:Array[String]=Array(thinkgamer,cyan,GQ) 数组的输出可以采用while或者foreach或者for进行输出 scala>valabc=Array("thinkgamer","cyan","GQ") abc:Array[String]=Array(thinkgamer,cyan,GQ) scala>vari=0 i:Int=0 scala>while(iabc.foreach(str=>println(str)) thinkgamer cyan GQ
2):Lists
Scala的List和Java不同,不能被改变,这样做的一个好处是方法与方法之间关联性较小,从而方法变得更可靠和重用性高,使用这个规则也就意味着变量的设置是不可修改的,这也就避免了多线程访问的互锁问题
scala>valone=List(1,2,3) one:List[Int]=List(1,2,3) scala>valtwo=List(4,5) two:List[Int]=List(4,5) scala>valthree=one:::two three:List[Int]=List(1,2,3,4,5)
:::方法表示连接两个列表,当然列表定义了::方法(右操作符),用于向列表添加元素
scala>valfour=three::6::7::Nil four:List[Any]=List(List(1,2,3,4,5),6,7) scala>valfive=1::2::3::4::Nil five:List[Int]=List(1,2,3,4)
Nil表示空列表
Scala的List类还定义了其他很多很有用的方法,比如head,last,length,reverse,tail等这里就不一一说明了,具体可以参考List的文档
3)Tuples
Scala中另外一个很有用的容器类是Tupels,和Lists不同的Tuples可以包含不同类型的数据,而List只能包含同类型的数据,Tuples在方法需要返回多个结果时非常有用(Tuple对应数学的矢量的概念)
一旦定义了一个元组,可以使用._和索引来访问元组的元素(矢量的分量,注意和数组不同的是,元组的索引从1开始)
scala>valpair=(22,"one") pair:(Int,String)=(22,one) scala>println(pair._1) 22 scala>println(pair._2) one
元组的实际类型取决于它的分量的类型,比如上边的pair的类型实际为Tuple2[Int,String],目前Scala支持的元组的最大长度为22,如果有需要,你可以扩展更长的元组
4)Set
scala>varset=Set("a","b") set:scala.collection.immutable.Set[String]=Set(a,b) scala>set+="c" scala>set res8:scala.collection.immutable.Set[String]=Set(a,b,c) scala>println(set.contains("c")) true
缺省情况Set为ImmutableSet,如果你需要使用可修改的集合类(Set类型),你可以使用全路径来指明Set,比如scala.collection.mutalbe.Set
5)Map
Map的基本用法如下(Map类似于其他语言中的关联数据如PHP)
scala>valroman=Map(1->"I",2->"II") roman:scala.collection.immutable.Map[Int,String]=Map(1->I,2->II) scala>println(roman(1)) I scala>println(roman(2)) II
总结
以上就是本文关于Scala基础简介及代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续浏览本站其他相关专题,有什么问题可以随时留言,小编会及时回复大家。感谢朋友们对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。