Scala基礎簡介及代碼示例
一、主要內容
Scala中變量的聲明與函數定義
Scala中的控制結構
Scala中的數據類型
1:變量聲明與函數定義
變量聲明:val 和 var ,兩者的區(qū)別是val聲明的變量是不可變的,而var聲明的變量可變
帶返回值
scala> def max(x:Int,y:Int):Int = { | if(x>y) x | else y | } max: (x: Int, y: Int)Int scala> max(1,2) res5: Int = 2
不帶返回值
scala> def helloworld()=println("HelloWorld") helloworld: ()Unit
2:控制結構
1) 判斷(if)
類似于上邊函數定義中的max函數
2) 循環(huán)(while/do)
while 語句包括狀態(tài)判斷和循環(huán)體,只要當前狀態(tài)判斷為真,就執(zhí)行循環(huán)體一遍,然后進行下一狀態(tài)判斷,判斷為假時終止判斷,形如 while (A)B
do語句和while相反,先執(zhí)行循環(huán)體一遍,然后進行狀態(tài)判斷,狀態(tài)判斷為真,則繼續(xù)執(zhí)行循環(huán)體,否則終止循環(huán),形如 do B while(A)
scala> var m =3 m: Int = 3 scala> while(m!=0){ | println(m) | m -= 1 | } 3 2 1 scala> var n =3 n: Int = 3 scala> do{ | println(n) | n -= 1 | }while(n!=0) 3 2 1
3) 枚舉(for)
for的兩種實現
scala> for(i<- 1 to 3) | println(i) 1 2 3 scala> for(i<- 1 until 3) | println(i) 1 2
4) 匹配(match表達式)
scala中的match類似于其他語言中的switch,從上往下進行匹配
scala> val a = "gyt" a: String = gyt scala> a match{ | case "gyt" => println("OK") | case "cyan" => println("no") | } OK
5) 異常處理(throw/try)
Scala通過throw拋出一個異常,其異常捕獲和處理與java十分類似
scala> if(true){ | println("throw new exception") | throw new IllegalArgumentException | } throw new exception java.lang.IllegalArgumentException ... 35 elided
scala> try{ | val file = new FileReader("input.txt") | }catch{ | case ex: FileNotFoundException => //handle missing file | case ex: IOException => //handle other I/O error | }finally{ | println("end") | } end
6) 輸出(print/println)
一個不換行輸出,一個換行輸出
7) 輸入(readline)
輸入通常使用read函數,readline是從控制臺輸如一行,指定類型為readT,T為類型,例如
readscala> val name = readLine(“Your Name: \n”) warning: there was one deprecation warning; re-run with -deprecation for details Your Name: name: String = thinkgamer
8) 其他語句
return語言表示返回某個值,但是Scala事實上無需使用return語句,對于函數來說,其默認返回值是最后出現的一個值,不用特別注明,如需要返回的值,并非最后出現時,可在函數體后加上該值的標識符使之出現,聲明函數時使用return語句,必須聲明返回值類型,例如 def max:T = {return}
break/continue在C++中非常常見的控制結構語句,但在Scala中是不必要的,可以使用布爾值類型的兩通過if語句進行控制
3:數據結構
1) 數組
使用new來實例化一個類,當你創(chuàng)建一個對象的實例時,你可以使用數值或者類型參數
scala> val abc = new Array[String](3) abc: Array[String] = Array(null, null, null) scala> abc(0)="thinkgamer" scala> abc(1)="cyan" scala> abc(2)="GQ" scala> for(i<- 0 to 2) | 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”),因此上邊的例子也可以使用傳統(tǒng)的方法調用,可以寫成:
scala> val new_abc = new Array[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<- 0 to 2) | println(new_abc(i)) aaa bbb ccc
從這點來收,數組在scala中并不是某種特殊的數據類型,和普通的類并沒有什么區(qū)別
不過scala還是提供了初始化數組的簡單的方法,上述的例子可以這樣寫:
scala> val abc = Array("thinkgamer","cyan","GQ") abc: Array[String] = Array(thinkgamer, cyan, GQ) 數組的輸出可以采用while或者foreach或者for進行輸出 scala> val abc = Array("thinkgamer","cyan","GQ") abc: Array[String] = Array(thinkgamer, cyan, GQ) scala> var i = 0 i: Int = 0 scala> while(i<abc.length){ | println(abc(i)) | i+=1 | } thinkgamer cyan GQ scala> abc.foreach(str=>println(str)) thinkgamer cyan GQ
2):Lists
Scala的List和Java不同,不能被改變,這樣做的一個好處是方法與方法之間關聯(lián)性較小,從而方法變得更可靠和重用性高,使用這個規(guī)則也就意味著變量的設置是不可修改的,這也就避免了多線程訪問的互鎖問題
scala> val one = List(1,2,3) one: List[Int] = List(1, 2, 3) scala> val two = List(4,5) two: List[Int] = List(4, 5) scala> val three = one:::two three: List[Int] = List(1, 2, 3, 4, 5)
:::方法表示連接兩個列表,當然列表定義了::方法(右操作符),用于向列表添加元素
scala> val four = three::6::7::Nil four: List[Any] = List(List(1, 2, 3, 4, 5), 6, 7) scala> val five = 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> val pair = (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> var set = 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為Immutable Set,如果你需要使用可修改的集合類(Set類型),你可以使用全路徑來指明Set,比如scala.collection.mutalbe.Set
5) Map
Map的基本用法如下(Map類似于其他語言中的關聯(lián)數據如PHP)
scala> val roman =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基礎簡介及代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)瀏覽本站其他相關專題,有什么問題可以隨時留言,小編會及時回復大家。感謝朋友們對本站的支持!
您可能感興趣的文章
- 01-11php下關于Cannot use a scalar value as an array的解決辦法
- 01-11PHP警告Cannot use a scalar value as an array的解決方法
- 01-11Windows7下安裝Scala 2.9.2教程
- 01-11淺談Scala的Class、Object和Apply()方法
- 01-11深入理解Scala函數式編程過程
- 01-11Scala安裝及環(huán)境圖文配置教程
- 01-11利用Gradle如何構建scala多模塊工程的步驟詳解
- 01-11linux下搭建scala環(huán)境并寫個簡單的scala程序
- 01-11Scala的文件讀寫操作與正則表達式
- 01-11詳解如何使用Spark和Scala分析Apache訪問日志


閱讀排行
本欄相關
- 01-11php下關于Cannot use a scalar value as an ar
- 01-11PHP警告Cannot use a scalar value as an array的
- 01-11Windows7下安裝Scala 2.9.2教程
- 01-11淺談Scala的Class、Object和Apply()方法
- 01-11深入理解Scala函數式編程過程
- 01-11Scala基礎簡介及代碼示例
- 01-11Scala安裝及環(huán)境圖文配置教程
- 01-11linux下搭建scala環(huán)境并寫個簡單的sca
- 01-11利用Gradle如何構建scala多模塊工程的步
- 01-11Scala的文件讀寫操作與正則表達式
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現頁面的局部加載
- 08-05dedecms(織夢)副欄目數量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 04-02jquery與jsp,用jquery