您好,登錄后才能下訂單哦!
本篇內容介紹了“Scala有哪些表達式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、條件表達式
if else是可以返回值的,if (x > 0) 1 else -1,這個表達式的返回值是Int類型,-1或者1。所以可以這么寫val i = if (x > 0) 1 else -1 ,其實我更喜歡這么寫 if (x > 0) i=1 else i=-1,前者更加函數化,用val就行,后者更加指令化,必須用var。
二、Unit,if (x > 0) 1,x > 0的話,返回值是1,這個沒有問題,可是x < 0怎么辦呢?這個表達式沒有返回值,沒關系,Scala當中有一個Scala.Unit,寫作(), 就相當于void 。
三、關于分號,scala當中可寫可不寫,但有一種情況必須寫,一行寫了多個語句,其實這個事不知道也行,干嘛非要一行寫多個語句。
四、塊表達式
java當中也有差不多的東西,不同的是,scala這東西也是有返回值的,返回值就是 x + y ,最后一句話是x + y,這在java當中是不可理解的東西,但是scala當中,這個就相當于是這個塊表達式的返回值。
val res = { val x = 10; val y = 20; x + y }
五、While,scala和java沒有明顯區別,按照我的理解,while是比較指令化的東西,在scala當中盡量避免使用。
六、For, for(i <- 1 to 10) println(i),這是scala當中for的典型樣子,跟java當中for (String str : String[])寫法是類似的,這個東西在scala當中常用,下面有更詳細的介紹。
七、高級for循環
1、多層循環不用寫多個for;
2、for的括號內,可以寫很多語句;
3、每個生成器后面可以帶一個守衛
for (i <- 1 to 10 if i % 2 == 0; toValue = 5; j <- 1 to toValue if j % 2 == 0) println(i, j)
八、for推導式
for語句之所以在scala當中更加受寵,因為它也能有返回值。下面語句的返回值是Vector((2,2), (2,4), (4,2), (4,4), (6,2), (6,4), (8,2), (8,4), (10,2), (10,4))
for (i <- 1 to 10 if i % 2 == 0; toValue = 5; j <- 1 to toValue if j % 2 == 0) yield (i, j)
九、函數
不需要return,最后一個表達式的值就是返回值,也就是x或者-x
def abs(x : Int) = if (x > 0) x else -x
十、默認參數和帶名參數,這里充分體現了scala的靈活性
def concat(value : String, left : String = "[", right : String = "]") = left + value + right
十一、變長參數,終于又減到一個跟java差不多的概念
def sum(args : Int*) = {累加操作}
十二、過程
這里其實也跟java差不多,void開頭的方法在java當中可以稱之為過程,而在scala當中,沒有返回值的函數,也可以稱之為過程,不過在scala當中,強調的是函數化的編程,所以,一個函數返回值以外的操作,被稱之為副作用。過程有以下兩種寫法:
def printSelf(str: String) {print(str)}或 def printSelf(str: String) :Unit = {print(str)}
十三、lazy val變量的延遲加載,在第一次訪問的時候,在實際加載值
十四、異常,無受檢機制,也有返回值,Nothing
“Scala有哪些表達式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。